案例需求

写一个mysql binlog备份脚本,要求每天0点0分,计算机自动备份前一天的binlog日志,打包后发送给备份服务器。

脚本应用场景:

文件备份

解决问题

日常文件备份
日常数据备份

脚本思路

1、确定binlog的位置及备份时间间隔 每天
当前要备份的binlog是谁
刷新binlog日志,生成新的binlog用于存储备份节点后的数据
2、打包binlog日志 以年-月-日_binlog.tar.gz格式
3、生成校验码 md5sum
4、将校验码和压缩包存入到文件夹 文件夹命名 年-月-日 再次打包
5、使用scp拷贝到备份机器
6、备份机器解压收到的目录压缩包 通过校验码 教研binlog压缩包是否完整
完整 完成备份 ——-发邮件给管理员,明确备份成功
不完整 报错———发邮件给管理员,要求手动备份

实现代码

  1. #!/bin/bash
  2. #Description:
  3. #Author: www.zutuanxue.com
  4. #Created Time:
  5. #将mysql的binlog日志备份到备份服务器
  6. ########variables
  7. db_user='root'
  8. db_password=''
  9. log='/var/log/mysql_backup.log'
  10. ###main
  11. #获得信息
  12. binlog_dir='/var/lib/mysql'
  13. current_binlog=`mysql -u $db_user -e "show master status"|egrep "binlog.[[:digit:]]*"|awk '{print $1}'`
  14. date >> $log
  15. #准备备份
  16. #1 刷新binlog
  17. mysql -u $db_user -e "flush logs"
  18. #2 打包要备份的binlog
  19. tar czf `date +%F`_binlog.tar.gz $binlog_dir/$current_binlog &>>$log
  20. #3 生成校验码
  21. md5sum `date +%F`_binlog.tar.gz > "`date +%F`_md5sum.txt"
  22. #4 存入文件夹
  23. [ ! -d `date +%F` ]&&mkdir `date +%F`
  24. mv `date +%F`_binlog.tar.gz `date +%F`
  25. mv `date +%F`_md5sum.txt `date +%F`
  26. # 打包目录
  27. tar czf `date +%F`.tar.gz `date +%F` &>>$log
  28. #5 拷贝
  29. #要求提前做证书信任
  30. scp `date +%F`.tar.gz root@192.168.11.241:/opt/backup &>>$log
  31. if [ $? -ne 0 ];then
  32. echo "ERROR:scp `date +%F`.tar.gz fail" &>>$log
  33. exit 1
  34. fi
  35. #6 校验
  36. ssh root@192.168.11.241 "tar xf /opt/backup/`date +%F`.tar.gz -C /opt"
  37. #ssh root@192.168.11.241 "cd /opt/backup`date +%F`"
  38. ssh root@192.168.11.241 "cd /opt/`date +%F`;md5sum -c `date +%F`_md5sum.txt" &>>$log
  39. if [ $? -eq 0 ];then
  40. echo "success" &>>$log
  41. ssh root@192.168.11.241 "rm -rf /opt/`date +%F`"
  42. else
  43. echo "fail" &>>$log
  44. fi