Mysql數(shù)據(jù)庫(kù)增量備份的思路和方法
MySQL數(shù)據(jù)庫(kù)增量備份,在這之前修改我們的數(shù)據(jù)庫(kù)配置文件/etc/my.cnf開(kāi)啟bin-log日志功能即可。接下來(lái)是我參考了下網(wǎng)上的一些方法,自己寫(xiě)的,主要還是要能學(xué)到他的一些思路和方法。
#function:MYSQL增量備份 #version:1.0.0 #author:wangyanlin #date:2017/08/02 #----------------------------------------------------------------------------------------------- #!/bin/sh export LANG=en_US.UTF-8 #設(shè)置時(shí)間 DATE=`date +%Y%m%d` #設(shè)置信息 USER=root PASSWORD=withub #設(shè)置路徑 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 #這個(gè)for循環(huán)用于比對(duì)$Counter,$NextNum這兩個(gè)值來(lái)確定文件是不是存在或最新的。 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用于檢測(cè)目標(biāo)文件是否存在,存在就寫(xiě)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 "本次備份運(yùn)行時(shí)間: "$((end_seconds-start_seconds))"s" >> $LogFile
添加計(jì)劃任務(wù):
crontab -e
00 03 * * * /root/MySQL_incrementbak.sh #每天的凌晨3點(diǎn)開(kāi)始增量備份日
logs日志打印出來(lái)的效果:
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=2 --flush-logs > $DumpFile tar zcvf $GZDumpFile $DumpFile rm $DumpFile Last=`date +"%Y年%m月%d日 %H:%M:%S"` echo 開(kāi)始:$Begin 結(jié)束:$Last $GZDumpFile succ >> $LogFile
參數(shù)注釋?zhuān)?/p>
--all-databases #備份所有庫(kù) --lock-all-tables #為所有表加讀鎖 --routinge #存儲(chǔ)過(guò)程與函數(shù) --triggers #觸發(fā)器 --events #記錄事件 --master-data=2 #在備份文件中記錄當(dāng)前二進(jìn)制日志的位置,并且為注釋的,1是不注釋掉在主從復(fù)制中才有意義 --flush-logs #日志滾動(dòng)一次
結(jié)果如下:
[root@master full]# ls 20140728.sql.tgz bak.log [root@master full]# cat bak.log 開(kāi)始:2014年07月28日 19:02:59 結(jié)束:2014年07月28日 19:02:59 20140728.sql.tgz succ 開(kāi)始:2014年07月28日 19:12:01 結(jié)束: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
總結(jié)
以上所述是小編給大家介紹的Mysql數(shù)據(jù)庫(kù)增量備份的思路和方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- MySQL數(shù)據(jù)庫(kù)定時(shí)備份的實(shí)現(xiàn)方法
- mysql數(shù)據(jù)庫(kù)太大了如何備份與還原
- 8種手動(dòng)和自動(dòng)備份MySQL數(shù)據(jù)庫(kù)的方法
- ThinkPHP框架實(shí)現(xiàn)的MySQL數(shù)據(jù)庫(kù)備份功能示例
- Navicat for MySQL定時(shí)備份數(shù)據(jù)庫(kù)及數(shù)據(jù)恢復(fù)詳解
- linux實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)每天自動(dòng)備份定時(shí)備份
- MySQL數(shù)據(jù)庫(kù)的shell腳本自動(dòng)備份
- MySQL數(shù)據(jù)庫(kù)如何導(dǎo)入導(dǎo)出(備份還原)
- Mysql備份多個(gè)數(shù)據(jù)庫(kù)代碼實(shí)例
相關(guān)文章
在EF中使用MySQL的方法及常見(jiàn)問(wèn)題
這篇文章主要介紹了在EF中使用MySQL的方法及常見(jiàn)問(wèn)題 的相關(guān)資料,需要的朋友可以參考下2016-06-06mysql數(shù)據(jù)如何通過(guò)data文件恢復(fù)
這篇文章主要介紹了mysql數(shù)據(jù)如何通過(guò)data文件恢復(fù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12使用Python的Django框架中的壓縮組件Django Compressor
這篇文章主要介紹了使用Python的Django框架中的壓縮組件Django Compressor,這個(gè)工具主要用于實(shí)現(xiàn)js/css的壓縮,需要的朋友可以參考下2015-05-05MySQL無(wú)法啟動(dòng)幾種常見(jiàn)問(wèn)題小結(jié)
在群里看到有新同學(xué)還在問(wèn)MySQL無(wú)法啟動(dòng)的問(wèn)題,于是總結(jié)了幾個(gè)常見(jiàn)情況與解決方法,需要的朋友可以參考下2013-09-09Win 8或以上系統(tǒng)下MySQL最新版5.7.17(64bit ZIP綠色版)安裝部署教程
這篇文章主要為大家詳細(xì)介紹了Win 8或以上系統(tǒng)下MySQL最新版5.7.17 64bit ZIP綠色版安裝部署教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Windows系統(tǒng)下MySQL無(wú)法啟動(dòng)的萬(wàn)能解決方法
這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下MySQL無(wú)法啟動(dòng)的萬(wàn)能解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12MySQL為Null會(huì)導(dǎo)致5個(gè)問(wèn)題(個(gè)個(gè)致命)
這篇文章主要介紹了MySQL為Null會(huì)導(dǎo)致5個(gè)問(wèn)題(個(gè)個(gè)致命),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01