案例需求
写一个mysql binlog备份脚本,要求每天0点0分,计算机自动备份前一天的binlog日志,打包后发送给备份服务器。
脚本应用场景
文件备份
解决问题
日常文件备份
日常数据备份
脚本思路
1、确定binlog的位置及备份时间间隔 每天
当前要备份的binlog是谁
刷新binlog日志,生成新的binlog用于存储备份节点后的数据
2、打包binlog日志 以年-月-日_binlog.tar.gz格式
3、生成校验码 md5sum
4、将校验码和压缩包存入到文件夹 文件夹命名 年-月-日 再次打包
5、使用scp拷贝到备份机器
6、备份机器解压收到的目录压缩包 通过校验码 教研binlog压缩包是否完整
完整 完成备份 —–发邮件给管理员,明确备份成功
不完整 报错——发邮件给管理员,要求手动备份
实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #!/bin/bash
db_user='root' db_password='' log='/var/log/mysql_backup.log'
binlog_dir='/var/lib/mysql' current_binlog=`mysql -u $db_user -e "show master status"|egrep "binlog.[[:digit:]]*"|awk '{print $1}'`
date >> $log
mysql -u $db_user -e "flush logs"
tar czf `date +%F`_binlog.tar.gz $binlog_dir/$current_binlog &>>$log
md5sum `date +%F`_binlog.tar.gz > "`date +%F`_md5sum.txt"
[ ! -d `date +%F` ]&&mkdir `date +%F` mv `date +%F`_binlog.tar.gz `date +%F` mv `date +%F`_md5sum.txt `date +%F`
tar czf `date +%F`.tar.gz `date +%F` &>>$log
scp `date +%F`.tar.gz root@192.168.11.241:/opt/backup &>>$log if [ $? -ne 0 ];then echo "ERROR:scp `date +%F`.tar.gz fail" &>>$log exit 1 fi
ssh root@192.168.11.241 "tar xf /opt/backup/`date +%F`.tar.gz -C /opt"
ssh root@192.168.11.241 "cd /opt/`date +%F`;md5sum -c `date +%F`_md5sum.txt" &>>$log if [ $? -eq 0 ];then echo "success" &>>$log ssh root@192.168.11.241 "rm -rf /opt/`date +%F`" else echo "fail" &>>$log fi
|
案例思考
双机同步实现方式