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