mysql数据库完美增量备份脚本
发布:smiling 来源: PHP粉丝网 添加日期:2015-04-17 15:02:38 浏览: 评论:0
增量备份的意思就是在以前数据上进行增加备份了,这样的数据备份无需大量的操作,只需要小小的变动就可以实现数据备份了,下面给各位整理了一段mysql数据库完美增量备份脚本,希望对大家有帮助.
是否因为mysql太大,来回备份浪费资源带宽而发愁,如果想解决这个麻烦就需要增量备份,下面是张小三资源网修改的一份mysql的增量备份脚本,我已做了相关注释,大家自行修改下就可以用了.
vi /etc/my.cnf开启日志及定期清理日志:
- log-bin=mysql-bin
- binlog_format=mixed
- //二进制日志自动删除的天数。默认值为0,表示“没有自动删除”
- expire_logs_days = 5
全备份脚本:
- #!/bin/bash
- # Name:qbk全备份脚本
- # mysql qbk scripts
- # By zxsdw.com
- # Last Modify:2015-01-21
- #定义脚本存放路径
- #scriptsDir=/usr/sbin
- #定义用户名及密码
- user=root
- userPWD=密码
- #定义要备份的数据库
- database=数据库
- #定义完全备份文件存放路径
- bakDir=/backup/mysql
- #eMailFile=$bakDir/email.txt
- #eMail=admin@zxsdw.com
- #定义日志文件
- LogFile=$bakDir/mysqlbak.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=$DATE.sql.gz
- mysqldump --flush-logs -u$user -p$userPWD --quick $database| gzip >$DumpFile
- echo "Dump Done" >> $LogFile
- echo "[$DumpFile]Backup Success!" >> $LogFile
- daily_databakDir=$bakDir/daily_backup
- cd $bakDir/daily_backup
- find $daily_databakDir -name "daily*" -type f -mtime +35 -exec rm {} \; > /dev/null 2>&1
- 增量备份脚本:
- #!/bin/bash
- # Name:zbk增量备份
- # mysql zbk scripts
- # By zxsdw.com
- # Last modify:2015-01-21
- #定义数据库用户名及密码
- user=root
- userPWD=密码
- #定义数据库
- database=数据库
- #生成一个新的mysql-bin.00000X文件,如果err日志被清除,则自动新建一个。
- /usr/local/mysql/bin/mysqladmin -u$user -p$userPWD flush-logs
- #定义增量备份位置
- daily_databakDir=/backup/mysql/daily_backup
- #定义MYSQL数据日志目录
- mysqlDataDir=/usr/local/mysql/var
- #定义增量日志及目录
- eMailFile=$daily_databakDir/email.txt
- #eMail=admin@zxsdw.com
- #定义变量DATE格式为20150127
- DATE=`date +%Y%m%d`
- #定义一个总的logFile日志
- logFile=$daily_databakDir/mysql$DATE.log
- #美化日志模板
- echo " " > $eMailFile
- echo "-----------------------" >> $eMailFile
- #时间格式为15-01-27 01:06:17
- echo $(date +"%y-%m-%d %H:%M:%S") >> $eMailFile
- echo "-------------------------" >> $eMailFile
- #定义删除bin日志的时间范围,格式为20150124010540
- TIME=$(date "-d 3 day ago" +%Y%m%d%H%M%S)
- #定义需要增量备份数据的时间范围,格式为2015-01-26 01:04:11
- StartTime=$(date "-d 1 day ago" +"%Y-%m-%d %H:%M:%S")
- ###########开始删除操作美化日志标题##############
- echo "Delete 3 days before the log" >>$eMailFile
- #删除三天前的bin文件,及更新index里的索引记录,美化日志标题
- mysql -u$user -p$userPWD -e "purge master logs before ${TIME}" && echo "delete 3 days before log" |tee -a $eMailFile
- #查找index索引里的bin 2进制文件并赋值给 i。
- filename=`cat $mysqlDataDir/mysql-bin.index |awk -F "/" '{print $2}'`
- for i in $filename
- do
- #########开始增量备份操作,美化日志标题###########
- echo "$StartTime start backup binlog" >> $eMailFile
- #利用mysqlbinlog备份1天前增加的数据,并gzip压缩打包到增量备份目录
- /usr/local/mysql/bin/mysqlbinlog -u$user -p$userPWD -d $database --start-datetime="$StartTime" $mysqlDataDir/$i |gzip >> $daily_databakDir/daily$DATE.sql.gz |tee -a $eMailFile
- done
- #如果以上备份脚本执行成功,接着运行下面的删除脚本
- if [ $? = 0 ]
- then
- # 删除mtime>32的增量日志备份文件
- find $daily_databakDir -name "*.log" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&1
- cd $daily_databakDir
- echo "Daily backup succeed" >> $eMailFile
- else
- echo "Daily backup fail" >> $eMailFile
- #mail -s "MySQL Backup" $eMail < $eMailFile #备份失败之后发送邮件通知
- #fi结束IF判断
- fi
- #把变量eMailFile的内容替换logFile内容
- cat $eMailFile > $logFile
- #如果上面的IF判断失败,再次运行删除mtime>32的增量日志备份文件
- find $daily_databakDir -name "*.log" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&1 --phpfensi.com
- rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd root@$ip:/zxs/allimg/$(date -d -1day +%y%m%d) /zxs/allimg/
- gunzip < /backup/mysql/daily_backup/ceshi.sql.gz | /usr/local/mysql/bin/mysql -u用户名 -p密码 数据库名 --force
- --force参数 忽略错误
Tags: mysql备份脚本 mysql增量备份
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)