《MySQL 系列連載之 XtraBackup 備份原理(1)》要點(diǎn):
本文介紹了MySQL 系列連載之 XtraBackup 備份原理(1),希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
在日常的linux運(yùn)維工作中,大數(shù)據(jù)量備份與還原,始終是個(gè)難點(diǎn).關(guān)于mysql的備份和恢復(fù),比較傳統(tǒng)的是用mysqldump工具,今天本文推薦另一個(gè)備份工具innobackupex.
如果您在本文遇到任何問(wèn)題或疑問(wèn)請(qǐng)到QQ群中與我們交流.也可在下方進(jìn)行評(píng)論.我將在第一時(shí)間和您進(jìn)行交流,共同學(xué)習(xí).
QQ群:201777608、526871767、1689067(加群時(shí)注明:運(yùn)維派)
innobackupex和mysqldump都可以對(duì)mysql進(jìn)行熱備份的,mysqldump對(duì)mysql的innodb的備份可以使用single-transaction參數(shù)來(lái)開(kāi)啟一個(gè)事務(wù),利用innodb的mvcc來(lái)不進(jìn)行鎖表進(jìn)行熱備份,mysqldump備份是邏輯備份,備份出來(lái)的文件是sql語(yǔ)句,所以備份和恢復(fù)的時(shí)候很慢,但是備份和恢復(fù)時(shí)候很清楚.當(dāng)MYSQL數(shù)據(jù)超過(guò)10G時(shí),用mysqldump來(lái)導(dǎo)出備份就比較慢了,此種情況下用innobackupex這個(gè)工具就比mysqldump要快很多.利用它對(duì)mysql做全量和增量備份.
此工具調(diào)用xtrabackup和tar4ibd工具,實(shí)現(xiàn)很多對(duì)性能要求并不高的任務(wù)和備份邏輯,可以說(shuō)它是innodb熱備工具ibbackup的一個(gè)開(kāi)源替代品.
XtraBackup是目前首選的備份方案之一
1、MySQL主從同步原理
通過(guò)設(shè)置在Master MySQL上的binlog(使其處于打開(kāi)狀態(tài)),Slave MySQL上通過(guò)一個(gè)I/O線程從Master MySQL上讀取binlog,然后傳輸?shù)絊lave MySQL的中繼日志中,然后Slave MySQL的SQL線程從中繼日志中讀取中繼日志,然后應(yīng)用到Slave MySQL的數(shù)據(jù)庫(kù)中.這樣實(shí)現(xiàn)了主從數(shù)據(jù)同步功能.
2、XtraBackup備份原理
innobackupex在后臺(tái)線程不斷追蹤InnoDB的日志文件,然后復(fù)制InnoDB的數(shù)據(jù)文件.數(shù)據(jù)文件復(fù)制完成之后,日志的復(fù)制線程也會(huì)結(jié)束.這樣就得到了不在同一時(shí)間點(diǎn)的數(shù)據(jù)副本和開(kāi)始備份以后的事務(wù)日志.完成上面的步驟之后,就可以使用InnoDB崩潰恢復(fù)代碼執(zhí)行事務(wù)日志(redo log),以達(dá)到數(shù)據(jù)的一致性.
3、備份的兩個(gè)過(guò)程
backup,備份階段,追蹤事務(wù)日志和復(fù)制數(shù)據(jù)文件(物理備份).
preparing,重放事務(wù)日志,使所有的數(shù)據(jù)處于同一個(gè)時(shí)間點(diǎn),達(dá)到一致性狀態(tài).
4、XtraBackup的優(yōu)點(diǎn)
1、可以快速可靠的完成數(shù)據(jù)備份(復(fù)制數(shù)據(jù)文件和追蹤事務(wù)日志)
2、數(shù)據(jù)備份過(guò)程中不會(huì)中斷事務(wù)的處理(熱備份)
3、節(jié)約磁盤(pán)空間和網(wǎng)絡(luò)帶寬
4、自動(dòng)完成備份鑒定
5、因更快的恢復(fù)時(shí)間而提高在線時(shí)間
5、Xtrabackup的兩個(gè)工具
1)xtrabackup :只能用于熱備份innodb,xtradb兩種數(shù)據(jù)引擎表的工具,不能備份其他表.
2)innobackupex:是一個(gè)對(duì)xtrabackup封裝的perl腳本,提供了用于myisam(會(huì)鎖表)和innodb引擎,及混合使用引擎?zhèn)浞莸哪芰?主要是為了方便同時(shí)備份InnoDB和MyISAM引擎的表,但在處理myisam時(shí)需要加一個(gè)讀鎖.并且加入了一些使用的選項(xiàng).如slave-info可以記錄備份恢 復(fù)后,作為slave需要的一些信息,根據(jù)這些信息,可以很方便的利用備份來(lái)重做slave. innobackupex比xtarbackup有更強(qiáng)的功能,它整合了xtrabackup和其他的一些功能,它不但可以全量備份/恢復(fù),還可以基于時(shí)間的增量備份與恢復(fù).innobackupex同時(shí)支持innodb,myisam.
6、Xtrabackup可以做什么
1)在線(熱)備份整個(gè)庫(kù)的InnoDB, XtraDB表
2)在xtrabackup的上一次整庫(kù)備份基礎(chǔ)上做增量備份(innodb only)
3)以流的形式產(chǎn)生備份,可以直接保存到遠(yuǎn)程機(jī)器上(本機(jī)硬盤(pán)空間不足時(shí)很有用)
MySQL數(shù)據(jù)庫(kù)本身提供的工具并不支持真正的增量備份,二進(jìn)制日志恢復(fù)是point-in-time(時(shí)間點(diǎn))的恢復(fù)而不是增量備份.
7、Xtrabackup工具工作原理
支持對(duì)InnoDB存儲(chǔ)引擎的增量備份
1)首先完成一個(gè)完全備份,并記錄下此時(shí)檢查點(diǎn)的LSN(Log Sequence Number).
2)在進(jìn)行增量備份時(shí),比較表空間中每個(gè)頁(yè)的LSN是否大于上次備份時(shí)的LSN,如果是,則備份該頁(yè),同時(shí)記錄當(dāng)前檢查點(diǎn)的LSN.首先,在logfile中找到并記錄最后一個(gè)checkpoint(“l(fā)ast checkpoint LSN”),然后開(kāi)始從LSN的位置開(kāi)始拷貝InnoDB的logfile到xtrabackup_logfile;接著,開(kāi)始拷貝全部的數(shù)據(jù)文件.ibd;在拷貝全部數(shù)據(jù)文件結(jié)束之后,才停止拷貝logfile.因?yàn)閘ogfile里面記錄全部的數(shù)據(jù)修改情況,所以,即時(shí)在備份過(guò)程中數(shù)據(jù)文件被修改過(guò)了,恢復(fù)時(shí)仍然能夠通過(guò)解析xtrabackup_logfile保持?jǐn)?shù)據(jù)的一致.
8、innobackupex備份mysql數(shù)據(jù)的流程
innobackupex首先調(diào)用xtrabackup來(lái)備份innodb數(shù)據(jù)文件,當(dāng)xtrabackup完成后,innobackupex就查看文件xtrabackup_suspended ;然后執(zhí)行“FLUSH TABLES WITH READ LOCK”來(lái)備份其他的文件.
9、innobackupex恢復(fù)mysql數(shù)據(jù)的流程
innobackupex首先讀取my.cnf,查看變量(datadir,innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir)對(duì)應(yīng)的目錄是存在,確定相關(guān)目錄存在后,然后先copy myisam表和索引,然后在copy innodb的表、索引和日志.
10、innobackupex備份和恢復(fù)的工作原理
(1)備份的工作原理
1、備份開(kāi)始時(shí)首先會(huì)開(kāi)啟一個(gè)后臺(tái)檢測(cè)進(jìn)程,實(shí)時(shí)檢測(cè)mysql redo的變化,一旦發(fā)現(xiàn)redo中有新的日志寫(xiě)入,立刻將日志記入后臺(tái)日志文件xtrabackup_log中.
2、之后復(fù)制innodb的數(shù)據(jù)文件和系統(tǒng)表空間文件ibdata1,待復(fù)制結(jié)束后.
3、執(zhí)行flush tables with read lock操作.
4、復(fù)制.frm,MYI,MYD,等文件(執(zhí)行flush tableswith read lock的目的是為了防止數(shù)據(jù)表發(fā)生DDL操作,并且在這一時(shí)刻獲得binlog的位置).
5、最后會(huì)發(fā)出unlock tables,把表設(shè)置為可讀可寫(xiě)狀態(tài).
6、最終停止xtrabackup_log.
(2)恢復(fù)的工作原理
1、為了恢復(fù)一個(gè)備份,innobackupex需要以–copy-back選項(xiàng)啟動(dòng).
2、innobackupex將會(huì)首先通過(guò)my.cnf文件讀取如下變量:datadir,innodb_data_home_dir,innodb_data_file_path, innodb_log_group_home_dir,并確定這些目錄存在.
3、接下來(lái),此腳本將會(huì)首先拷貝MyISAM表、索引文件、其他類(lèi)型的文件(如:.frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, par and .opt files)
4、接下來(lái)拷貝InnoDB表數(shù)據(jù)文件,最后拷貝日志文件.
5、拷貝執(zhí)行時(shí)將會(huì)保留文件屬性,在使用備份文件啟動(dòng)MySQL前,可能需要更改文件的owener(如從拷貝文件的user更改到mysql用戶).
第一篇 MySQL 系列連載之 XtraBackup 備份原理(1)
第二篇 MySQL 系列連載之 XtraBackup全量熱備 or 恢復(fù)實(shí)踐(2)
第三篇 MySQL 系列連載之 XtraBackup 增量熱備 or 恢復(fù)實(shí)踐(3)
感謝您閱讀.
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/4264.html