分类: Mysql/postgreSQL
2009-02-21 10:30:47
备份策略一:直接拷贝数据库文件(不推荐)
备份策略二:使用mysqlhotcopy备份数据库(完全备份,适合小型数据库备份)
备份策略三:使用mysqldump备份数据库(完全+增量备份,适合中型数据库备份)
备份策略四:使用主从复制机制(replication)(实现数据库实时备份)
脚本下载地址:
备份策略一、直接拷贝数据库文件
直接拷贝数据文件最为直接、快速、方便,但缺点是基本上不能实现增量备份。为了保证数据的一致性,需要在备份文件前,执行以下
FLUSH
也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。
备份策略二、使用mysqlhotcopy备份数据库
mysqlhotcopy
本备份策略适合于小型数据库的备份,数据量不大,可以采用mysqlhotcopy程序每天进行一次完全备份。
备份策略布置:
(1)、安装DBD-mysql
shell>
shell>
shell>
shell>
shell>
shell>
shell>
(2)、设置crontab任务,每天执行备份脚本
shell>
0
每天凌晨3:00执行备份脚本。
mysqlbackup.sh注释:
#!/bin/sh
# Name:mysqlbackup.sh
# PS:MySQL DataBase Backup,Use mysqlhotcopy script.
# Write by:i.Stone
# Last Modify:2007-11-15
#
# 定义变量,请根据具体情况修改
# 定义脚本所在目录
scriptsDir=`pwd`
# 数据库的数据目录
dataDir=/usr/local/mysql/data/
# 数据备份目录
tmpBackupDir=/tmp/tmpbackup/
backupDir=/tmp/mysqlbackup/
# 用来备份数据库的用户名和密码
mysqlUser=root
mysqlPWD=111111
# 定义eMail地址
eMail=alter@somode.com
# 如果临时备份目录存在,清空它,如果不存在则创建它
if [[ -e $tmpBackupDir ]]; then
else
fi
# 如果备份目录不存在则创建它
if [[ ! -e $backupDir ]];then
fi
# 清空MySQLBackup.log
if [[ -s MySQLBackup.log ]]; then
fi
# 得到数据库备份列表,在此可以过滤不想备份的数据库
for databases in `find $dataDir -type d | \
# 备份数据库
done
# 压缩备份文件
date=`date -I`
cd $tmpBackupDir
tar czf $backupDir/mysql-$date.tar.gz ./
# 发送邮件通知
if [[ -s MySQLBackup.log ]]; then
fi
# 使用smbclientmv.sh脚本上传数据库备份到备份服务器
# $scriptsDir/smbclientmv.sh
smbclientmv.sh注释
#!/bin/sh
# Name:smbclientmv.sh
# PS:Move the data to Backup Server.
# Write by:i.Stone
# Last Modify:2007-11-15
#
# 定义变量
# 备份服务器名
BackupServer="BackupServerName"
# 共享文件夹名
BackupShare="ShareName"
# 备份服务器的访问用户名和密码
BackupUser="SMBUser"
BackupPW="SMBPassword"
# 定义备份目录
BackupDir=/tmp/mysqlbackup
date=`date -I`
# Move the data to BackupServer
smbclient //$BackupServer/$BackupShare \
$BackupPW -d0 -W WORKGROUP -U $BackupUser \
-c "put $BackupDir/mysql-$date.tar.gz \
mysql-$date.tar.gz"
# Delete temp files
rm -f $BackupDir/mysql-$date.tar.gz
(3)、恢复数据库到备份时的状态
mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:
shell> cp -rf db_name /usr/local/mysql/data/
shell> chown -R mysql:mysql /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)
本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。