案例需求
寫一個mysql binlog備份腳本,要求每天0點0分,計算機自動備份前一天的binlog日志,打包後發送給備份伺服器。
腳本應用場景:
檔案備份
解決問題
日常檔案備份
日常資料備份
腳本思路
1、确定binlog的位置及備份時間間隔 每天
目前要備份的binlog是誰
重新整理binlog日志,生成新的binlog用于存儲備份節點後的資料
2、打包binlog日志 以年-月-日_binlog.tar.gz格式
3、生成校驗碼 md5sum
4、将校驗碼和壓縮包存入到檔案夾 檔案夾命名 年-月-日 再次打包
5、使用scp拷貝到備份機器
實作代碼
#!/bin/bash
#Description:
#Author: www.zutuanxue.com
#Created Time:
#将mysql的binlog日志備份到備份伺服器
########variables
db_user='root'
db_password=''
log='/var/log/mysql_backup.log'
###main
#獲得資訊
binlog_dir='/var/lib/mysql'
current_binlog=`mysql -u $db_user -e "show master status"|egrep "binlog.[[:digit:]]*"|awk '{print $1}'`
date >> $log
#準備備份
#1 重新整理binlog
mysql -u $db_user -e "flush logs"
#2 打包要備份的binlog
tar czf `date +%F`_binlog.tar.gz $binlog_dir/$current_binlog &>>$log
#3 生成校驗碼
md5sum `date +%F`_binlog.tar.gz > "`date +%F`_md5sum.txt"
#4 存入檔案夾
[ ! -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
#5 拷貝
#要求提前做證書信任
scp `date +%F`.tar.gz [email protected]:/opt/backup &>>$log
if [ $? -ne 0 ];then
echo "ERROR:scp `date +%F`.tar.gz fail" &>>$log
exit 1
fi
#6 校驗
ssh [email protected] "tar xf /opt/backup/`date +%F`.tar.gz -C /opt"
#ssh [email protected] "cd /opt/backup`date +%F`"
ssh [email protected] "cd /opt/`date +%F`;md5sum -c `date +%F`_md5sum.txt" &>>$log
if [ $? -eq 0 ];then
echo "success" &>>$log
ssh [email protected] "rm -rf /opt/`date +%F`"
else
echo "fail" &>>$log
fi
案例思考
雙機同步實作方式