分类: Mysql/postgreSQL
2011-01-26 16:54:54
|
|
MySQL数据库备份脚本说明 |
****网络科技(上海)有限公司 |
1.完整备份
1.1 备份方法
采用免费工具MySQLhotcopy,直接拷贝数据库文件(*.FRM,*..MYD,*.MYI)。在进行拷贝文件时, 会锁定需要进行备份的数据库,加上读锁。然后执行flush tables把缓存在内存里的修改写入硬盘上的数据库文 件, 最后把备份的数据库文件复制下来。此过程,可能会造成玩家数据丢失,但是会比使用mysqldump等备 份方法速度快,锁定表时间少,从而能最大限度地降低数据丢失的情况。
1.2 脚本说明
完整脚本备份文件名称:fullybackup.sh ,存放目录: /back
需要先创建一个目录back用来存放备份文件,也可以进行修改为其他目录,则需要对脚本中的backdir 值 修改;所属组:root;拥有者:root 。
脚本参数:
backdir ----------------备份文件存放的路径(第一次运行该脚本时会自动创建)
server -----------------为数据库服务器名称;
dbname----------------为数据库名称;
password ---------------为admin帐号登陆数据库的密码;
mysqlbak.log ---------备份脚本自己的日志,记录脚本运行与结束时间信息;
admin---------------------为数据库服务器帐号,若需要使用其他帐号的请修改:
/usr/local/mysql/bin/mysqlhotcopy $dbname --flushlog -u admin -p $rootpass $backdir | logger -t mysqlhotcopy
把 –u admin中的admin改为具有读取数据库文件的数据库服务器帐号,即可!
1.3 备份文件存放结构
以备份服务器ccxydata_test 中的数据库eugene为例: /back/mysql/ccxydata_test-07-07-01.tgz,而目录 eugene之下才是备份过来的文件:*.frm、*.MYD、*.MYI,以及db.opt。
1.4 其他说明
若备份文件一直存放在数据库服务器的话,脚本会自动检测存放的备份文件,根据设置的删除时间,删 除存放的备份文件。目前是设置删除30天之前的备份文件,也可以执行修改,只需要修改:
for d in `find . -type d -mtime +30 -maxdepth 1`
把 30 改为您所要设置的数字即可。
没有提供数据库备份文件压缩传送功能,可以使用ftp命令把备份文件定期传送到指定的服务器上,建议 传送脚本另外写,并且在玩家很少的时候,进行文件传送操作。
Linux安装完后,系统需要再安装Perl-DBD-mysql组件(Linux安装时,会自动安装Perl5.8组件,但是这 个组 件不会自动安装),用于支持Mysqlhotcopy工具。
Linux自带的perl-DBD-mysql,需要安装mysql3.23客户端才能继续安装该组建,而由加密等问题,我们 一般情况会卸载低版本的mysql。Perl-DBD-mysql组件版本:DBD-mysql-2.9005,源码压缩包: DBD-mysql-2.9005.tar.gz,编译安装步骤:
# tar zxvf DBD-mysql-2.9005.tar.gz
#cd DBD-mysql-2.9005
#export LANG=C
#perl Makefile.PL –mysql_config=/usr/local/mysql/bin/mysql_config
#make ; make install
2.日志备份
2.1 备份方法
采用MySQL自带的管理工具mysqladmin和文件拷贝命令,进行日志文件备份。只是在刷新日志的时候, 会短 暂地锁定数据库表,发生数据丢失的几率很小。
2.2 脚本说明
完整脚本备份文件名称:incrementbackup.sh ,存放目录: /back
需要先创建一个目录back用来存放备份文件(注:若在完整备份时已创建该目录,则不需要再重复创建), 也可以进行修改为其他目录,则需要对脚本中的backdir 值修改;所属组:root;拥有者:root 。
脚本参数:server -----------------为数据库服务器名称;
logfile ---------------为数据库服务器存放日志的文件路径,安装目录不同则需要修改
测试目录为: /usr/local/mysql/var;
password -------------为admin帐号登陆数据库的密码;
backdir ---------------日志备份文件存放路径
admin---------------------为数据库服务器帐号,若需要使用其他帐号的请修改:
/usr/local/mysql/bin/mysqladmin -u admin -p$rootpass flush-logs
把 –u admin中的admin改为具有读取数据库文件的数据库服务器帐号,即可!
另外:测试的日志文件格式为:mysql-bin.00001 若不一样则需要修改两行脚本(替换掉mysql-bin 即可):
1> total1=`ls $logfile/mysql-bin.*|wc -l`
2> for f in `ls $logfile/mysql-bin.*|head -n $total`
2.3 备份文件存放结构
以ccxydata_test服务器中数据库eugene为例:
/back/mysql /ccxydata_test-07-07-19-13-1.tgz
注: ccxydata_test-7-07-19----------------为服务器名称加备份的日期组成,每天会创建一个这样的目录;
13-----------------------------------------为每次备份日志时,当前整点。
1-------------------------------------------拷贝过来的日志文件编号,每次备份都是从1开始递增,有两个日志文 件,则:/back/mysql /ccxydata_test-07-07-19-13-1.tgz、
/back/mysql /ccxydata_test-07-07-19-13-2.tgz;
3 还原
3.1 还原方法
创建一个与需要还原的数据库名称一样的数据库,然后把完整备份的*.FRM、*..MYD、*.MYI,以及db.opt, 复制到新数据库名称目录下,然后重新启动MySQL服务。
再在此基础上,利用mysqlbinlog工具把二进制格式的日志生成可执行的*.sql文件,并且删除掉不必要的 语句,然后使用客户端工具执行,则还原到所要求的时间点。
关闭与启动MySQL服务的语句为: /etc/init.d/mysql stop,请确认在安装MySQL后,把mysql.server文 件拷贝到 /etc/init.d目录下,语句如下:
cp /home/mysql-5.0.22/support-files/mysql.server /etc/init.d/mysql
3.2 自动还原脚本
自动备份的基础是完整备份与日志备份,且文件结构也不能随便修改,否则备份脚本需要修改还原脚本。 自动还原脚本名称为:restore.sh, 该脚本会自动生成两个test.sql与template.sql文件,最终MySQL执行的为 template.sql,并且在执行完后会自动删除临时创建的两个*.sql文件;在进行还原的时候会自动先关闭MySQL 服务,等完整备份的文件拷贝到指定目录下 ,然后再重新启动MySQL服务。
3.3 参数说明
fulldir ------------------完整备份文件存放的目录(例如:/back/mysql);
incrementdir ---------日志备份文件存放的目录(例如:/back/increment);
bindir ------------------MySQL自带工具程序目录(例如:/usr/local/mysql/bin);
vardir ------------------MySQL数据文件存放的目录(例如:/usr/local/mysql/var);
backuptime -----------完整备份的时间(即每天发生完整备份的整点部分时间:小时,格式:hh);
password --------------MySQL 的root帐号对应的密码;
para --------------------还原的日期(格式要求:yy-mm-dd);
time -------------------时间点(小时,格式:hh);
dbname ---------------需要还原的数据库名;
脚本restore.sh中的初始化参数,也可以考虑改成调用函数方式传递参数,稍作修改即可实现。但由于参 数较多,执行脚本的时候,直接传递参数容易出错,所以没写成此方式。
4 调度脚本自动运行代码
4.1 完整备份调度执行的代码(每天的05点30分与17:00进行完整备份)
30 05 * * * cd /back;./fullybackup.sh>>/back/mysql/mysqlbak.log &
00 17 * * * cd /back;./fullybackup.sh>>/back/mysql/mysqlbak.log &
4.2日志备份调度执行的代码(每天的每个整点进行日志备份)
00 0-23/1 * * * cd /back;./incrementbackup.sh