mysql數據庫增量備份,在這之前修改我們的數據庫配置文件/etc/my.cnf開啟bin-log日誌功能即可。接下來是我參考了下網上的一些方法,自己寫的,主要還是要能學到他的一些思路和方法。
#function:MYSQL增量備份 #version:1.0.0 #author:wangyanlin #date:2017/08/02 #----------------------------------------------------------------------------------------------- #!/bin/sh export LANG=en_US.UTF-8 #設置時間 DATE=`date +%Y%m%d` #設置信息 USER=root PASSWORD=withub #設置路徑 cd / /usr/bin/mkdir -p mysql_bak/daily /usr/bin/mkdir -p mysql_bak/logs BakDir=/mysql_bak/daily BinDir=/var/lib/mysql LogFile=/mysql_bak/logs/Daily_$DATE.log BinlogFile=/var/lib/mysql/mysql-bin.index /usr/bin/mysqladmin -u$USER -p$PASSWORD flush-logs #刷新日誌 Counter=`wc -l $BinlogFile | awk '{print $1}'` NextNum=0 start_time=`date +'%Y-%m-%d %H:%M:%S'` echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next1 Bakup start! >> $LogFile #這個for循環用於比對$Counter,$NextNum這兩個值來確定文件是不是存在或最新的。 for file in `cat $BinlogFile` do base=`basename $file` #basename用於截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./ NextNum=`expr $NextNum + 1` if [ $NextNum -eq $Counter ] then echo $base skip! >> $LogFile else dest=$BakDir/$base if(test -e $dest) #test -e用於檢測目標文件是否存在,存在就寫exist!到$LogFile去。 then echo $base exist! >> $LogFile else cp $BinDir/$base $BakDir echo $base copying >> $LogFile fi fi done echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next2 Bakup succ! >> $LogFile end_time=`date +'%Y-%m-%d %H:%M:%S'` start_seconds=$(date --date="$start_time" +%s); end_seconds=$(date --date="$end_time" +%s); echo "本次備份運行時間: "$((end_seconds-start_seconds))"s" >> $LogFile
添加計劃任務:
crontab -e
00 03 * * * /root/MySQL_incrementbak.sh #每天的淩晨3點開始增量備份日
logs日誌打印出來的效果:
PS:下面看下mysql全量和增量備份腳本
全量:
[root@master leo]# cat DBfullBak.sh #!/bin/bash #use mysqldump to fully backup mysql data BakDir=/root/leo/full LogFile=/root/leo/full/bak.log Date=`date +%Y%m%d` Begin=`date +"%Y年%m月%d日 %H:%M:%S"` cd $BakDir DumpFile=$Date.sql GZDumpFile=$Date.sql.tgz mysqldump -uroot -p123456 --all-databases --lock-all-tables --routines --triggers --events --master-data=http://www.jb51.net/article/2 --flush-logs > $DumpFile tar zcvf $GZDumpFile $DumpFile rm $DumpFile Last=`date +"%Y年%m月%d日 %H:%M:%S"` echo 開始:$Begin 結束:$Last $GZDumpFile succ >> $LogFile
參數註釋:
--all-databases #備份所有庫 --lock-all-tables #為所有表加讀鎖 --routinge #存儲過程與函數 --triggers #觸發器 --events #記錄事件 --master-data=http://www.jb51.net/article/2 #在備份文件中記錄當前二進制日誌的位置,並且為註釋的,1是不註釋掉在主從復制中才有意義 --flush-logs #日誌滾動一次
結果如下:
[root@master full]# ls 20140728.sql.tgz bak.log [root@master full]# cat bak.log 開始:2014年07月28日 19:02:59 結束:2014年07月28日 19:02:59 20140728.sql.tgz succ 開始:2014年07月28日 19:12:01 結束:2014年07月28日 19:12:01 20140728.sql.tgz succ [root@master full]#
增量備份:
[root@master leo]# cat DBDailyBak.sh #!/bin/bash BakDir=/root/leo/binlog/ BinDir=/var/lib/mysql LogFile=/root/leo/binlog/bak.log BinFile=/var/lib/mysql/mysql-bin.index mysqladmin -uroot -p123456 flush-logs Counter=`wc -l $BinFile|awk '{print $1}'` NextNum=0 for file in `cat $BinFile` do base=`basename $file` NextNum=`expr $NextNum + 1` if [ $NextNum -eq $Counter ] then echo $base skip! >> $LogFile else dest=$BakDir/$base if(test -e $dest) then echo $base exist! >> $LogFile else cp $BinDir/$base $BakDir/ echo $base copying >> $LogFile fi fi done echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup succ~ >> $LogFile
總結
以上所述是小編給大家介紹的Mysql數據庫增量備份的思路和方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對電腦玩物網站的支持!
Tags: mysql_bak 增量 NextNum BinlogFile 備份 mysql-bin
文章來源: