mysql增量備份及斷點(diǎn)恢復(fù)腳本實(shí)例
簡(jiǎn)介
增量備份是指在一次全備份或上一次增量備份后,以后每次的備份只需備份與前一次相比增加或者被修改的文件。這就意味著,第一次增量備份的對(duì)象是進(jìn)行全備后所產(chǎn)生的增加和修改的文件;第二次增量備份的對(duì)象是進(jìn)行第一次增量備份后所產(chǎn)生的增加和修改的文件,如此類(lèi)推。
目的
解決完全備份中時(shí)間長(zhǎng)、恢復(fù)慢的問(wèn)題,采取了增量備份
特點(diǎn)
優(yōu):無(wú)重復(fù)數(shù)據(jù),備份量不大,時(shí)間短
缺:需要上次完全備份及完全備份后的增量備份才能恢復(fù),需對(duì)增量備份逐個(gè)反復(fù)恢復(fù),操作繁瑣
實(shí)現(xiàn)方式
通過(guò)mysql的二進(jìn)制日志間接實(shí)現(xiàn)增量備份:
二進(jìn)制日志保存了所有更新或可能更新的數(shù)據(jù)
二進(jìn)制日志在mysql啟動(dòng)時(shí)開(kāi)始記錄,且會(huì)重新創(chuàng)建新的日志文件
需定時(shí)執(zhí)行flush logs方法重新創(chuàng)建日志,生成二進(jìn)制文件序列
實(shí)驗(yàn)環(huán)境:
安裝了mysql5.7數(shù)據(jù)庫(kù)的一臺(tái)centos7虛擬機(jī)
操作過(guò)程:
一、增量備份
1、在配置文件中添加二進(jìn)制日志
vim /etc/my.cnf
[mysqld] #在此模塊下添加
log-bin=mysql-bin #二進(jìn)制日志
2、重啟服務(wù),并查看二進(jìn)制日志
systemctl restart mysqld.service
cd /usr/local/mysql/data/
mysqlbinlog --no-defaults mysql-bin.000001

3、在數(shù)據(jù)庫(kù)自由創(chuàng)建數(shù)據(jù)庫(kù)、表,作為實(shí)驗(yàn)?zāi)0?br/>

4、對(duì)school數(shù)據(jù)庫(kù)進(jìn)行完全備份
mysqldump -uroot -pabc123 school > /opt/school.sql
5、刷新日志,生成新的日志,注意:之前數(shù)據(jù)庫(kù)的操作寫(xiě)入編號(hào)為000001的日志中,新生成的000002的日志為空
mysqladmin -uroot -pabc123 flush-logs #刷新日志
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001 #查看000001日志
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #查看000002日志
#--base64-output=decode-rows -v:避免文件中亂碼,前面的查看命令也可以使用


6、新添加mysql數(shù)據(jù)庫(kù)操作,然后刷新日志,進(jìn)行增量備份
use school;
mysql>indert into info (id,name,score) values (3,'aaa',78);
mysql>delete from info where name='tom'; #誤操作
mysql> insert into info (id,name,score) values (4,'bbb',64);
mysqladmin -uroot -pabc123 flush-logs #刷新日志,生成000003
#此次增量備份已記錄到000002日志文件中


7、刪除info表
mysql -uroot -pabc123 -e 'use school;drop table info;'
8、恢復(fù)完全備份,然后恢復(fù)增量備份
mysql -uroot -pabc123 school < /opt/school.sql #完全備份還原

mysqlbinlog --no-defaults mysql-bin.000002 | mysql -uroot -p

那么,此處暴露出一個(gè)問(wèn)題,如果出現(xiàn)誤操作,還原備份時(shí)就會(huì)出現(xiàn)錯(cuò)誤,并不能實(shí)現(xiàn)理想的備份,達(dá)到真正的目的。此時(shí),就需要斷鏈恢復(fù)(屬于恢復(fù)增量備份的特殊用法),即在還原時(shí)只恢復(fù)正確的數(shù)據(jù)庫(kù)操作。
二、斷鏈恢復(fù)
在操作斷鏈恢復(fù)前,需要還原到未進(jìn)行增量備份還原的狀態(tài),如圖

基于時(shí)間點(diǎn)
2018-09-04 16:43:52 錯(cuò)誤操作時(shí)間 (開(kāi)頭加載到此時(shí)間點(diǎn)結(jié)束) 
2018-09-04 16:44:32 正確操作時(shí)間 (從此時(shí)間點(diǎn)再次開(kāi)始加載) 從此時(shí)間點(diǎn)再次開(kāi)始加載
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #查看000002日志

mysqlbinlog --no-defaults --stop-datetime='2018-09-04 16:43:52' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
mysqlbinlog --no-defaults --start-datetime='2018-09-04 16:44:32' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p

基于位置點(diǎn)
at 565 上一次正確執(zhí)行位置 --stop-position
at 667 下一次正確執(zhí)行位置 --start-position
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #查看000002日志

mysqlbinlog --no-defaults --stop-position='565' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
mysqlbinlog --no-defaults --start-position='667' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
 關(guān)注官方微信
                    關(guān)注官方微信