最近一直在思考如何增量備份二進制日誌,這樣一來我們就可以用mysqldump +二進制全備或者利用xtrabackup+二進制備份
思想:利用mysql-bin.index,如果是第一次備份,就將mysql-bin.index中的所有文件都複製到備份目錄下,然後保存備份後二進制日誌的序號到一個文件中backbinlogpostion
增量備份時(非第一備份),就用backbinlogpostion存的序號與當前mysql_bin.index中的比較,如果序號小於mysql-bin.index的序號,則複製該二進制文件到備份目錄
#!/bin/bash
#################################################################
#name:incrementalbackdb
#function:incremental-backup for mysql everyday
#finish-time:2015-04-02 by [email protected]
#################################################################
BinDir=/usr/local/mysql/data
BackupDir=/usr/backupyzx
BinLogFile=/usr/local/mysql/data/mysql-bin.index
BackLogPostion=0
BackupLog=${BackupDir}/backup.log
printN=
BinLogPostion=$(wc -l $BinLogFile|awk '{print $1}')
#get Binnary log sequ
LastSeqBinLog=$(basename $(tail -n 1 $BinLogFile))
LastBinLogPostion=${LastSeqBinLog##*0}
#before you backup,you should flush logs
/usr/local/mysql/bin/mysqladmin -uroot -p'tianqu' flush-logs
echo "begin increment-backup,time is:" $(date +'%Y-%m-%d %H:%M:%S') >>$BackupLog
if [ -e ${BackupDir}/backbinlogpostion ];then
#取出backbinlogpostion中二進制的序號,例如mysql-bin.000002,保存的序號就是2
BackLogPostion=$(cat ${BackupDir}/backbinlogpostion)
#如果當前二進制的序號與備份的二進制序號相同
if [ ${LastBinLogPostion} -eq $BackLogPostion ];then
echo "backup skiped,backup success!" >>${BackupLog}
else
#取出序號的之間的差值
printN=$((${LastBinLogPostion}-${BackLogPostion}))
echo $printN
q=$((${BackLogPostion}+1))
for file in $(tail -n ${printN} ${BinLogFile});do
basefile=$(basename ${file})
if [ $q -ge ${LastBinLogPostion} ];then
break;
fi
cp -pd ${BinDir}/${basefile} ${BackupDir}
echo ${basefile}" is copying...">>${BackupLog}
((q++))
done
echo ${LastBinLogPostion} >${BackupDir}/backbinlogpostion
fi
else
#如果是第一次備份,則創建backbinlogpostion,記錄當前已經複製二進制的日誌,方便第二次備份時,只備份新增的部分
touch ${BackupDir}/backbinlogpostion
i=1
for file in $(cat ${BinLogFile});do
basefile=$(basename ${file})
if [ $i -eq ${BinLogPostion} ];then
echo ${basefile##0} >${BackupDir}/backbinlogpostion
fi
if [ $i -eq $((${BinLogPostion}+1)) ];then
break;
fi
cp -pd ${BinDir}/${basefile} ${BackupDir}
echo ${basefile}" is copying...">>${BackupLog}
((i++))
done
fi
echo "increment-backup finished,time is :" $(date +'%Y-%m-%d %H:%M:%S')>>$BackupLog
#Delete old file
#將當前備份的文件轉移到遠程機器,然後刪除本地的存檔
#find ${BackupDir} -type f -mtime +15 -exec rm -rf {} \;
#/usr/bin/rsync -vzrtopg --progress ${BackupDir}
[email protected]::backup/backdb/
--password-file=/usr/local/etc/rsyncd.sec
mysql二進制增量備份
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
MySQL数据库集群-PXC方案
wy53780
2020-04-23 13:55:07
sql語法、關係建模
死瘦宅
2019-02-24 22:35:22
MySQL 事務、函數、觸發器、數據庫備份、權限管理
死瘦宅
2019-02-24 22:35:12
《從0到1學習Flink》—— Flink 讀取 Kafka 數據批量寫入到 MySQL
zhisheng
2019-02-24 21:04:11
SpringBoot 填坑 (一) | CentOS7.4 環境下,表時間字段默認值設置失效
一個優秀的廢人
2019-02-24 15:33:55
mysql-存儲過程
雙子城
2019-02-24 13:43:57
jmeter學習指南之操作 mysql 數據庫
小強測試
2019-02-24 13:34:06
20190222全天的實驗
清歡難尋
2019-02-24 13:17:21
數據庫監控:zabbix(fpmmm)
AMGYM
2019-02-24 13:05:14
數據庫監控:nagios(check_mysql_health)
AMGYM
2019-02-24 13:05:14
如何釋放已刪除的InnoDB磁盤空間
lvrenX
2019-02-24 13:04:33
MYSQL中視圖的使用
雙子城
2019-02-24 08:44:17
MySQL從刪庫到跑路
司木
2019-02-24 00:24:07
JavaBean操作
yi_sixian
2019-02-23 14:05:20
fdb2b技術博客簡介
fdb2b
2019-02-23 14:01:03