mysql4.0.x的增量备份脚本

By SuperTaoer | 六月 26, 2007
Under: 程序 技术 周边
Views: 998 views

mysql 4.0实现增量备份的功能。。。

首先,在mysl调用的配置文件(my.cnf)中打开binlog选项,即加入:
log-bin

然后重启mysql数据库使设置生效。

接下来,就是编写脚本进行测试,脚本参考网上的mysq4.1实现备份功能的说明。

脚本分为两个部分,一个是全部备份的脚本,另外一个是增量备份的脚本。

先来看全部备份的脚本,比较简单,就是用mysqldump命令完成的。。。。

  1. #!/bin/sh
  2.  
  3. # mysql data backup script
  4. # use mysqldump –help,get more detail.
  5. #
  6.  
  7. #db config
  8. DBHOST=localhost
  9. DBUSER=dbuser
  10. DBPASS=dbpass
  11. DBPORT=3306
  12. DBSOCK=/tmp/mysql.$DBPORT.sock
  13.  
  14. #backup config
  15. BakDir=/dbbak/mysql/$DBPORT
  16. LogFile=/dbbak/mysql/$DBPORT/mysqlbak.$DBPORT.log
  17.  
  18. DATE=`date +%Y%m%d`
  19.  
  20. echo " " >> $LogFile
  21. echo " " >> $LogFile
  22. echo "——————————————-" >> $LogFile
  23. echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
  24. echo "————————–" >> $LogFile
  25.  
  26.  
  27. cd $BakDir
  28.  
  29. DumpFile="$DBPORT\_$DATE.sql"
  30. GZDumpFile=$DBPORT"_"$DATE".sql.gz"
  31.  
  32.  
  33. /usr/local/mysql/bin/mysqldump -u"$DBUSER" -p"$DBPASS" -P"$DBPORT" -h"$DBHOST" -S"$DBSOCK" –quick –all-databases –flush-logs –delete-master-logs –lock-tables | gzip -f > $GZDumpFile
  34.  
  35. echo "Dump Done" >> $LogFile
  36.  
  37. echo "[$DumpFile]" >> $LogFile
  38. echo "[$GZDumpFile]Backup Success!" >> $LogFile
  39.  
  40. #delete previous daily backup files:采用增量备份的文件,如果完整备份后,则删除增量备份的文件.
  41. #if use full dump, after backup delete all previous daily file
  42. cd $BakDir/daily
  43.  
  44. rm -rf ./*
  45.  
  46. cd $BakDir
  47.  
  48. echo "Backup Done!"
  49.  
  50. echo "please Check $BakDir Directory!"
  51.  
  52. echo "copy it to your local disk or ftp to somewhere !!!"
  53.  
  54. ls -alh $BakDir

好了,测试下吧,一般的都不会出什么问题的。
接下来,来看增量备份的脚本。
增量备份的脚本实际上就是从启用了log后的每次所做修改的备份。

  1. #!/bin/sh
  2.  
  3. #db config
  4. DBHOST=localhost
  5. DBUSER=dbuser
  6. DBPASS=dbpass
  7. DBPORT=3306
  8. DBSOCK=/tmp/mysql.$DBPORT.sock
  9.  
  10. #
  11. # mysql binlog backup script
  12. #
  13.  
  14. /usr/local/mysql/bin/mysqladmin -u"$DBUSER" -p"$DBPASS" -P"$DBPORT" -h"$DBHOST" -S"$DBSOCK" flush-logs
  15.  
  16. DATADIR=/db/mysql/$DBPORT/data
  17. BAKDIR=/dbbak/mysql/$DBPORT/daily
  18.  
  19. ###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名
  20. HOSTNAME=`uname -n`
  21. HOSTNAME=`echo "$HOSTNAME"|awk -F ‘.’ ‘{print $1}’`
  22.  
  23. cd $DATADIR
  24.  
  25. FILELIST=`cat $HOSTNAME-bin.index`
  26.  
  27. ##计算行数,也就是文件数
  28. COUNTER=0
  29. for file in $FILELIST
  30. do
  31. COUNTER=`expr $COUNTER + 1 `
  32. done
  33.  
  34. NextNum=0
  35. for file in $FILELIST
  36. do
  37. base=`basename $file`
  38. NextNum=`expr $NextNum + 1`
  39. if [ $NextNum -eq $COUNTER ]
  40. then
  41. echo "skip lastest"
  42. else
  43. dest=$BAKDIR/$base
  44. if(test -e $dest)
  45. then
  46. echo "skip exist $base"
  47. else
  48. echo "copying $base"
  49. cp $base $BAKDIR
  50. fi
  51. fi
  52. done
  53.  
  54. echo "backup mysql binlog ok"

以上就是增量备份的脚本了。。。上面的两个脚本都是从mysql4.1备份脚本修改过来的。。。
需要注意的是:
在mysql4.1版本中,mysqldump命令有 可能会有lock-all-tables 这个参数,在但是mysql4.0中是 lock-tables 参数
在mysql4.1版本中,mysql生成增量文件名可能是: yourhostname-bin.index
例如你的hostname是: localhost.mysql.server
那么增量文件名就是: localhost.mysql. server-bin.index
但是在mysql4.0版本中却是 localhost-bin.index
即hostname中的第一部分,所以如果mysql版本是4.1
可以将 HOSTNAME=`echo “$HOSTNAME”|awk -F ‘.’ ‘{print $1}’` 省略。。。
上面之所以用可能,是因为我没有用过mysql4.1 版本,并且脚本是从mysql4.1的备份修改而来。

现在进行测试,先建立一个测试的数据库,然后再建立一个测试的表,向里面插入几条记录。。。
好了。。。试着先执行你的全部备份文件,然后再插入几条记录,这个时候,再执行你的增量备份文件。。。
接下来。。。试着从你的数据库中删除数据。。。
现在就该用咱们的增量备份来恢复刚才删除的数据了。。。

从二进制的增量备份中恢复数据,使用mysql的mysqlbinlog命令,
进入到你的备份目录,执行。。。

  1. /usr/local/mysql/bin/mysqlbinlog ./daily/* | /usr/local/mysql/bin/mysql -uroot -p -P3306 -localhost -S/tmp/mysql.3306.sock yourdatabasename

现在再看看,删除的数据是不是又回来了?
针对于次,各位还可以进行脚本的扩展。。。这个就要靠自己举一反三了。。。

差..好文!! (还没评价)
Loading ... Loading ...

Leave a Message

No Messages

No Messages

RSS feed for comments on this post. TrackBack URI

Leave a Message