您好,登錄后才能下訂單哦!
xtrabackup是percona公司開發的一個用于mysql物理熱備的備份工具。
軟件安裝后一共有4個可執行文件:
innobackupex:perl腳本,用來備份非innodb表,同時會調用xtrabackup來備份innodb表,會和mysql server進行交互。如:加讀鎖(FTWRL),獲取位點(show slave status)等。即封裝了xtrabackup
xbcrypt:用來解密
xbstream:類似tar,一種支持并發寫的流文件格式。和xbcrypt都在備份和解壓會用到
xtrabackup:c/c++編譯的二進制,用來備份innodb表,和mysql server沒有交互
原理
通信方式:xtrabackup和innobackupex之間的交互和協調是通過控制文件的創建和刪除來實現的。
主要文件:
xtrabackup_suspended_1
xtrabackup_suspended_2
xtrabackup_log_copied
例:看看備份時xtrabackup_suspended_2是怎么協調2個工具進程的:
1.innobackupex在啟動xtrabackup進程后,會一直等xtrabackup備份完innodb文件,方式就是等待xtrabackup_suspended_2被創建出
2.xtrabackup備份完innodb數據后,就在指定目錄下創建出xtrabackup_suspended_2,然后等到這個文件被innobackupex刪除,
3.innobackupex 檢測到文件 xtrabackup_suspended_2 被創建出來后,就繼續往下走;
4.innobackupex 在備份完非 InnoDB 表后,刪除 xtrabackup_suspended_2 這個文件,這樣就通知 xtrabackup 可以繼續了,然后等 xtrabackup_log_copied 被創建;
5.xtrabackup 檢測到 xtrabackup_suspended_2 文件刪除后,就可以繼續往下了。
備份過程圖
說明:
1.innobackupex 在啟動后,會先 fork 一個進程,啟動 xtrabackup進程,然后就等待 xtrabackup 備份完 ibd 數據文件;
2.xtrabackup 在備份 InnoDB 相關數據時,是有2種線程的,1種是 redo 拷貝線程,負責拷貝 redo 文件,1種是 ibd 拷貝線程,負責拷貝 ibd 文件;redo 拷貝線程只有一個,在 ibd 拷貝線程之前啟動,在 ibd 線程結束后結束。xtrabackup 進程開始執行后,先啟動 redo 拷貝線程,從最新的 checkpoint 點開始順序拷貝 redo 日志;然后再啟動 ibd 數據拷貝線程,在 xtrabackup 拷貝 ibd 過程中,innobackupex 進程一直處于等待狀態(等待文件被創建)。
3.xtrabackup 拷貝完成idb后,通知 innobackupex(通過創建文件),同時自己進入等待(redo 線程仍然繼續拷貝);
4.innobackupex 收到 xtrabackup 通知后,執行FLUSH TABLES WITH READ LOCK (FTWRL),取得一致性位點,然后開始備份非 InnoDB 文件(包括 frm、MYD、MYI、CSV、opt、par等)。拷貝非 InnoDB 文件過程中,因為數據庫處于全局只讀狀態,如果在業務的主庫備份的話,要特別小心,非 InnoDB 表(主要是MyISAM)比較多的話整庫只讀時間就會比較長,這個影響一定要評估到。
5.當 innobackupex 拷貝完所有非 InnoDB 表文件后,通知 xtrabackup(通過刪文件) ,同時自己進入等待(等待另一個文件被創建);
6.xtrabackup 收到 innobackupex 備份完非 InnoDB 通知后,就停止 redo 拷貝線程,然后通知 innobackupex redo log 拷貝完成(通過創建文件);
7.innobackupex 收到 redo 備份完成通知后,就開始解鎖,執行 UNLOCK TABLES;
8.最后 innobackupex 和 xtrabackup 進程各自完成收尾工作,如資源的釋放、寫備份元數據信息等,innobackupex 等待 xtrabackup 子進程結束后退出。
在備份進程中都是直接通過操作系統讀取數據文件的,只在執行SQL命令時和數據庫有交互,基本不會影響數據庫的運行,在備份非innodb時會有一段時間只讀,對備份innodb表時完全沒有影響。
備份innodb文件和非innodb都是通過拷貝文件,但實現的方式不一樣,innodb是以page粒度(xtrabackup),在讀取每個page時會檢驗checksum值,保證數據塊是一致的;非innodb是cp或者tar(innobackupex),由于對文件做了FTWRL,磁盤上的文件也是完整的,備份的數據也是完整的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。