MySQL全方位災(zāi)備保護(hù) Ⅲ 物理備份
發(fā)布人:scutech 發(fā)布日期:2018-05-21 17:30:38 點擊數(shù):9542
【編者按:上期我們分析和了解了鼎甲對MySQL的邏輯備份。本期我們重點解析鼎甲對MySQL的物理備份?!?/span>
上期回顧:
MySQL全方位災(zāi)備保護(hù) Ⅰ 應(yīng)用趨勢
在實現(xiàn)MySQL的邏輯備份后,鼎甲即刻投入對MySQL數(shù)據(jù)庫物理備份的研究和實現(xiàn),通過對數(shù)據(jù)庫文件的備份來提高備份效率和解決鎖表問題。
物理備份包括了完全備份、增量備份、日志備份。
主要是通過定制作業(yè)策略來備份MySQL的數(shù)據(jù)文件和日志文件,由于是基于數(shù)據(jù)文件的復(fù)制,所以物理備份比邏輯備份的速度快很多,而且采用的是熱備份,在備份過程中也減少影響業(yè)務(wù)系統(tǒng)對數(shù)據(jù)庫的使用。
DBackup在進(jìn)行物理備份時,支持自適應(yīng)MyISAM、InnoDB等多種存儲引擎,根據(jù)不同的引擎來提取對應(yīng)的文件進(jìn)行備份。
在MyISAM存儲引擎中,每張數(shù)據(jù)表都有3個文件,分別為表結(jié)構(gòu)定義文件(frm),表索引文件(MYI),表數(shù)據(jù)文件(MYD)。
對于InnoDB存儲引擎,增加了事務(wù)處理、回滾、崩潰修復(fù)能力和多版本并發(fā)控制的事務(wù)安全,數(shù)據(jù)文件更為復(fù)雜,每個InnoDB都會存在表結(jié)構(gòu)定義文件(frm),而表索引和表數(shù)據(jù)存放在表空間文件【共享表空間文件(ibdata1),獨享表空間(ibd)】中,另外還有相關(guān)的日志文件(binary log、redo log、undo log、errorlog等)。
在MySQL的物理備份中包括兩部分的備份數(shù)據(jù):對數(shù)據(jù)文件的完全備份和增量備份,對二進(jìn)制日志文件的復(fù)制。
這兩部分備份數(shù)據(jù)的備份處理流程不一樣,需要配置在不同的備份任務(wù)中完成。
數(shù)據(jù)文件備份
DBackup同時支持對InnoDB和MyISAM引擎的數(shù)據(jù)文件和表數(shù)據(jù)進(jìn)行備份,對InnoDB引擎中的數(shù)據(jù)文件,采用文件復(fù)制方式一頁一頁地復(fù)制InnoDB的數(shù)據(jù),而且不鎖定表,在文件復(fù)制的過程中,需要時刻監(jiān)控著redo log的變化,一旦log發(fā)生變化,就即刻同步添加到事務(wù)日志文件中,直至復(fù)制完所有數(shù)據(jù)文件,才停止對redo log的監(jiān)控和同步。
完成對ibd文件的備份后,將開始對非InnoDB表數(shù)據(jù)進(jìn)行備份,包括MyISAM表和InnoDB表結(jié)構(gòu)等信息,需要采用flush tables with lock來獲得一個讀鎖,保障復(fù)制數(shù)據(jù)的一致性位點,復(fù)制完成后將進(jìn)行解鎖。
DBackup對數(shù)據(jù)文件的備份處理,通過同步事務(wù)日志信息,并整合到備份集中,在進(jìn)行數(shù)據(jù)恢復(fù)時將保障數(shù)據(jù)文件和日志文件的一致性。
而對備份中的加鎖處理,也進(jìn)行了優(yōu)化,實現(xiàn)定向備份鎖技術(shù),只有在備份非InnoDB表數(shù)據(jù)的時候才啟動加鎖處理,這有效地縮短了備份中的鎖表時間,大大降低了因為數(shù)據(jù)庫備份對業(yè)務(wù)服務(wù)的中斷影響。
日志備份
日志備份是對二進(jìn)制日志(binary log)文件的定制備份,二進(jìn)制日志文件用來記錄所有用戶對數(shù)據(jù)庫操作,即記錄用戶對數(shù)據(jù)庫操作的sql語句。
binary log的文件有兩種類型:index文件有.index的后綴;log文件用.NNNNNN后綴命名,如mysql-bin.000001等。
對二進(jìn)制日志文件的備份,首先需要啟動開啟 MySQL 的二進(jìn)制日志記錄,常規(guī)的啟動方式是需要在MySQL的服務(wù)器上,通過后臺指令輸入來進(jìn)行配置啟動。
DBackup為了簡化配置流程,提升用戶使用感知,把二進(jìn)制日志的啟動設(shè)置,整合到前臺的配置頁面中,用戶只需做簡單配置后即可啟動。
物理備份的實現(xiàn),雖然提升了MySQL的備份效率,且降低了備份過程中對業(yè)務(wù)訪問數(shù)據(jù)的影響。
但由于備份是定時策略,無法做到密集型的備份,也就是在災(zāi)難恢復(fù)時,會丟失上次備份到故障點發(fā)生之間的數(shù)據(jù)。
為了提升數(shù)據(jù)恢復(fù)的RPO,鼎甲開始MySQL連續(xù)日志實時保護(hù)的研究和實現(xiàn)。
下期預(yù)告:MySQL全方位災(zāi)備保護(hù) Ⅳ 連續(xù)日志備份