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