mysql4.0.x的增量备份脚本
mysql 4.0实现增量备份的功能。。。
首先,在mysl调用的配置文件(my.cnf)中打开binlog选项,即加入:
log-bin
然后重启mysql数据库使设置生效。
接下来,就是编写脚本进行测试,脚本参考网上的mysq4.1实现备份功能的说明。
脚本分为两个部分,一个是全部备份的脚本,另外一个是增量备份的脚本。
先来看全部备份的脚本,比较简单,就是用mysqldump命令完成的。。。。
- #!/bin/sh
- # mysql data backup script
- # use mysqldump –help,get more detail.
- #
- #db config
- DBHOST=localhost
- DBUSER=dbuser
- DBPASS=dbpass
- DBPORT=3306
- DBSOCK=/tmp/mysql.$DBPORT.sock
- #backup config
- BakDir=/dbbak/mysql/$DBPORT
- LogFile=/dbbak/mysql/$DBPORT/mysqlbak.$DBPORT.log
- DATE=`date +%Y%m%d`
- echo " " >> $LogFile
- echo " " >> $LogFile
- echo "——————————————-" >> $LogFile
- echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
- echo "————————–" >> $LogFile
- cd $BakDir
- DumpFile="$DBPORT\_$DATE.sql"
- GZDumpFile=$DBPORT"_"$DATE".sql.gz"
- /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
- echo "Dump Done" >> $LogFile
- echo "[$DumpFile]" >> $LogFile
- echo "[$GZDumpFile]Backup Success!" >> $LogFile
- #delete previous daily backup files:采用增量备份的文件,如果完整备份后,则删除增量备份的文件.
- #if use full dump, after backup delete all previous daily file
- cd $BakDir/daily
- rm -rf ./*
- cd $BakDir
- echo "Backup Done!"
- echo "please Check $BakDir Directory!"
- echo "copy it to your local disk or ftp to somewhere !!!"
- ls -alh $BakDir
好了,测试下吧,一般的都不会出什么问题的。
接下来,来看增量备份的脚本。
增量备份的脚本实际上就是从启用了log后的每次所做修改的备份。
- #!/bin/sh
- #db config
- DBHOST=localhost
- DBUSER=dbuser
- DBPASS=dbpass
- DBPORT=3306
- DBSOCK=/tmp/mysql.$DBPORT.sock
- #
- # mysql binlog backup script
- #
- /usr/local/mysql/bin/mysqladmin -u"$DBUSER" -p"$DBPASS" -P"$DBPORT" -h"$DBHOST" -S"$DBSOCK" flush-logs
- DATADIR=/db/mysql/$DBPORT/data
- BAKDIR=/dbbak/mysql/$DBPORT/daily
- ###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名
- HOSTNAME=`uname -n`
- HOSTNAME=`echo "$HOSTNAME"|awk -F ‘.’ ‘{print $1}’`
- cd $DATADIR
- FILELIST=`cat $HOSTNAME-bin.index`
- ##计算行数,也就是文件数
- COUNTER=0
- for file in $FILELIST
- do
- COUNTER=`expr $COUNTER + 1 `
- done
- NextNum=0
- for file in $FILELIST
- do
- base=`basename $file`
- NextNum=`expr $NextNum + 1`
- if [ $NextNum -eq $COUNTER ]
- then
- echo "skip lastest"
- else
- dest=$BAKDIR/$base
- if(test -e $dest)
- then
- echo "skip exist $base"
- else
- echo "copying $base"
- cp $base $BAKDIR
- fi
- fi
- done
- 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命令,
进入到你的备份目录,执行。。。
- /usr/local/mysql/bin/mysqlbinlog ./daily/* | /usr/local/mysql/bin/mysql -uroot -p -P3306 -localhost -S/tmp/mysql.3306.sock yourdatabasename
现在再看看,删除的数据是不是又回来了?
针对于次,各位还可以进行脚本的扩展。。。这个就要靠自己举一反三了。。。
Leave a Message
No Messages
RSS feed for comments on this post. TrackBack URI
我的简介: 谁说tmd巨蟹座傻来的?我就是tmd巨蟹里边儿最聪明的!!!