Chinaunix首页 | 论坛 | 博客
  • 博客访问: 523265
  • 博文数量: 150
  • 博客积分: 6021
  • 博客等级: 准将
  • 技术积分: 1201
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-27 20:07
文章分类

全部博文(150)

文章存档

2012年(1)

2011年(27)

2010年(122)

我的朋友

分类: 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客户端才能继续安装该组建,而由加密等问题,我们               一般情况会卸载低版本的mysqlPerl-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.sqltemplate.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 完整备份调度执行的代码(每天的0530分与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

阅读(2540) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~