innobackupex工作原理


寫篇文章湊個數,基本是翻譯,建議看原文。

 
innobackupex是percona提供的一個使用perl語言完成的腳本工具。此工具調用xtrabackup和tar4ibd工具,實現很多對性能要求並不高的任務和備份邏輯。
 
接下來將介紹innobackupex備份和恢復的實現原理。
 
備份
如果在程序啟動階段未指定模式,innobackupex將會默認以備份模式啟動。
 
默認情況下,此腳本以--suspend-at-end選項啟動xtrabackup,然后xtrabackup程序開始拷貝InnoDB數據文件。當xtrabackup程序執行結束,innobackupex將會發現xtrabackup創建了xtrabackup_suspended_2文件,然后執行FLUSH TABLES WITH READ LOCK,此語句對所有的數據庫表加讀鎖。然后開始拷貝其他類型的文件。
 
如果--ibbackup未指定,innobackupex將會自行嘗試確定使用的xtrabackup的binary。其確定binary的邏輯如下:首先判斷備份目錄中xtrabackup_binary文件是否存在,如果存在,此腳本將會依據此文件確定使用的xtrabackup binary。否則,腳本將會嘗試連接database server,通過server版本確定binary。如果連接無法建立,xtrabackup將會失敗,需要自行指定binary文件。
 
在binary被確定后,將會檢查到數據庫server的連接是否可以建立。其執行邏輯是:建立連接、執行query、關閉連接。若一切正常,xtrabackup將以子進程的方式啟動。
 
FLUSH TABLES WITH READ LOCK是為了備份MyISAM和其他非InnoDB類型的表,此語句在xtrabackup已經備份InnoDB數據和日志文件后執行。在這之后,將會備份 .frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, .par, and .opt 類型的文件。
 
當所有上述文件備份完成后,innobackupex腳本將會恢復xtrabackup的執行,等待其備份上述邏輯執行過程中生成的事務日志文件。接下來,表被解鎖,slave被啟動,到server的連接被關閉。接下來,腳本會刪掉xtrabackup_suspended_2文件,允許xtrabackup進程退出。
 
恢復
為了恢復一個備份,innobackupex需要以--copy-back選項啟動。
 
innobackupex將會首先通過my.cnf文件讀取如下變量:datadir, innodb_data_home_dir, innodb_data_file_path, innodb_log_group_home_dir,並確定這些目錄存在。
 
接下來,此腳本將會首先拷貝MyISAM表、索引文件、其他類型的文件(如:.frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, par and .opt files),接下來拷貝InnoDB表數據文件,最后拷貝日志文件。拷貝執行時將會保留文件屬性,在使用備份文件啟動MySQL前,可能需要更改文件的owener(如從拷貝文件的user更改到mysql用戶)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM