当前位置:首页 > Mysql教程 > 列表

mysql数据库完美增量备份脚本

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-17 15:02:38 浏览: 评论:0 

增量备份的意思就是在以前数据上进行增加备份了,这样的数据备份无需大量的操作,只需要小小的变动就可以实现数据备份了,下面给各位整理了一段mysql数据库完美增量备份脚本,希望对大家有帮助.

是否因为mysql太大,来回备份浪费资源带宽而发愁,如果想解决这个麻烦就需要增量备份,下面是张小三资源网修改的一份mysql的增量备份脚本,我已做了相关注释,大家自行修改下就可以用了.

vi /etc/my.cnf开启日志及定期清理日志:

  1. log-bin=mysql-bin 
  2.  
  3. binlog_format=mixed 
  4.  
  5. //二进制日志自动删除的天数。默认值为0,表示“没有自动删除” 
  6.  
  7. expire_logs_days = 5 

全备份脚本:

  1. #!/bin/bash 
  2. Name:qbk全备份脚本 
  3. # mysql qbk scripts 
  4. By zxsdw.com 
  5. Last Modify:2015-01-21 
  6. #定义脚本存放路径 
  7. #scriptsDir=/usr/sbin 
  8. #定义用户名及密码 
  9. user=root 
  10. userPWD=密码 
  11. #定义要备份的数据库 
  12. database=数据库 
  13. #定义完全备份文件存放路径 
  14. bakDir=/backup/mysql 
  15. #eMailFile=$bakDir/email.txt 
  16. #eMail=admin@zxsdw.com 
  17. #定义日志文件 
  18. LogFile=$bakDir/mysqlbak.log 
  19. DATE=`date +%Y%m%d` 
  20. echo " " >> $LogFile 
  21. echo " " >> $LogFile 
  22. echo "--------------------------" >> $LogFile 
  23. echo $(date +"%y-%m-%d %H:%M:%S") >>$LogFile 
  24. echo "-----------------" >> $LogFile 
  25. cd $bakDir 
  26. DumpFile=$DATE.sql.gz 
  27. mysqldump --flush-logs -u$user -p$userPWD --quick $database| gzip >$DumpFile 
  28. echo "Dump Done" >> $LogFile 
  29. echo  "[$DumpFile]Backup Success!" >> $LogFile 
  30. daily_databakDir=$bakDir/daily_backup 
  31. cd $bakDir/daily_backup 
  32. find $daily_databakDir -name "daily*" -type f -mtime +35 -exec rm {} \; > /dev/null 2>&1 
  33. 增量备份脚本: 
  34. #!/bin/bash 
  35. Name:zbk增量备份 
  36. # mysql zbk scripts 
  37. By zxsdw.com 
  38. Last modify:2015-01-21 
  39.  
  40. #定义数据库用户名及密码 
  41. user=root 
  42. userPWD=密码 
  43. #定义数据库 
  44. database=数据库 
  45. #生成一个新的mysql-bin.00000X文件,如果err日志被清除,则自动新建一个。 
  46. /usr/local/mysql/bin/mysqladmin -u$user -p$userPWD flush-logs 
  47. #定义增量备份位置 
  48. daily_databakDir=/backup/mysql/daily_backup 
  49. #定义MYSQL数据日志目录 
  50. mysqlDataDir=/usr/local/mysql/var 
  51. #定义增量日志及目录 
  52. eMailFile=$daily_databakDir/email.txt 
  53. #eMail=admin@zxsdw.com 
  54. #定义变量DATE格式为20150127 
  55. DATE=`date +%Y%m%d` 
  56. #定义一个总的logFile日志 
  57. logFile=$daily_databakDir/mysql$DATE.log 
  58.  
  59. #美化日志模板 
  60. echo "       " > $eMailFile 
  61. echo "-----------------------" >> $eMailFile 
  62. #时间格式为15-01-27 01:06:17 
  63. echo $(date +"%y-%m-%d %H:%M:%S") >> $eMailFile 
  64. echo "-------------------------" >> $eMailFile 
  65.  
  66. #定义删除bin日志的时间范围,格式为20150124010540 
  67. TIME=$(date "-d 3 day ago" +%Y%m%d%H%M%S) 
  68. #定义需要增量备份数据的时间范围,格式为2015-01-26 01:04:11 
  69. StartTime=$(date "-d 1 day ago" +"%Y-%m-%d %H:%M:%S"
  70. ###########开始删除操作美化日志标题############## 
  71. echo "Delete 3 days before the log" >>$eMailFile 
  72. #删除三天前的bin文件,及更新index里的索引记录,美化日志标题 
  73. mysql -u$user -p$userPWD -e "purge master logs before ${TIME}" && echo "delete 3 days before log" |tee -a $eMailFile 
  74. #查找index索引里的bin 2进制文件并赋值给 i。 
  75. filename=`cat $mysqlDataDir/mysql-bin.index |awk -F "/" '{print $2}'
  76. for i in $filename 
  77. do 
  78. #########开始增量备份操作,美化日志标题########### 
  79. echo "$StartTime start backup binlog" >> $eMailFile 
  80. #利用mysqlbinlog备份1天前增加的数据,并gzip压缩打包到增量备份目录 
  81. /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 
  82. done 
  83.  
  84. #如果以上备份脚本执行成功,接着运行下面的删除脚本 
  85. if [ $? = 0 ] 
  86. then 
  87. # 删除mtime>32的增量日志备份文件 
  88. find $daily_databakDir -name "*.log" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&1 
  89. cd $daily_databakDir 
  90. echo "Daily backup succeed" >> $eMailFile 
  91. else 
  92. echo "Daily backup fail" >> $eMailFile 
  93. #mail -s "MySQL Backup" $eMail < $eMailFile #备份失败之后发送邮件通知 
  94. #fi结束IF判断 
  95. fi 
  96.  
  97. #把变量eMailFile的内容替换logFile内容 
  98. cat $eMailFile > $logFile 
  99. #如果上面的IF判断失败,再次运行删除mtime>32的增量日志备份文件 
  100. find $daily_databakDir -name "*.log" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&1 --phpfensi.com 
  101. rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd root@$ip:/zxs/allimg/$(date -d -1day +%y%m%d) /zxs/allimg/ 
  102. gunzip < /backup/mysql/daily_backup/ceshi.sql.gz | /usr/local/mysql/bin/mysql -u用户名 -p密码 数据库名 --force 
  103. --force参数 忽略错误

Tags: mysql备份脚本 mysql增量备份

分享到: