innobackupx備份原理

2022-08-11 03:27:20 字數 3840 閱讀 9604

1、工具內容

該軟體安裝完成會有四個工具,如下所示:

usr├── bin

│ ├── innobackupex

│ ├── xbcrypt

│ ├── xbstream

│ └── xtrabackup

其中最主要的為innobackupx以及xtrabackup,前者為乙個perl指令碼,後者為c編譯程式。xtrabackup是用來備份innodb表的,不能備份非innodb表,和mysqlserver沒有互動。而innobackupx是用來備份myisam表,同時會呼叫xtrabackup進行備份innodb表,同時會和mysqlserver進行互動,獲取位點、加讀鎖等資訊。xbcrypt是用來備份檔案加密解密用,xbstream類似於tar命令,是percona自己時限內的一種併發寫的流檔案格式。兩者在備份和解壓時都會用到。

2、原理

xtrabackup和innobackupx之間的互動協調是通過檔案的建立和刪除來實現的,主要檔案如下:(1

)xtrabackup_suspended_1(2

)xtrabackup_suspended_2(3

)xtrabackup_log_copied

協調工作過程如下:(1

)innobackupx在啟動xtrabackup程序之後,會一直等待xtrabackup備份完成innodb檔案,方式就是等待xtrabackup_suspended_2檔案建立出來;(2

)xtrabackup在備份完成innodb檔案之後,就在指定的檔案目錄下建立該xtrabackup_suspended_2檔案,然後等待innobackupx把檔案刪除;(3

)innobackupx在檢測到檔案xtrabackup_suspended_2已經被建立出來,就繼續向下走去備份非innodb檔案;(4

)innobackupx在備份完成非innodb表之後,會刪除xtrabackup_suspended_2檔案,通知xtrabackup繼續向下,同時等待xtrabackup_log_copied檔案被建立;

(5)xtrabackup在檢測到xtrabackup_suspended_2檔案被刪除之後,就繼續向下走。

3、備份過程解析

4、備份過程解析

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 時會有一段時間唯讀(如果沒有myisam表的話,唯讀時間在幾秒左右),在備份 innodb 資料檔案時,對資料庫完全沒有影響,是真正的熱備。

在上面描述的檔案拷貝,都是備份程序直接通過作業系統讀取資料檔案的,只在執行 sql 命令時和資料庫有互動,基本不影響資料庫的執行,在備份非 innodb 時會有一段時間唯讀(如果沒有myisam表的話,唯讀時間在幾秒左右),在備份 innodb 資料檔案時,對資料庫完全沒有影響,是真正的熱備。

5、保證資料一致性

innodb 和非 innodb 檔案的備份都是通過拷貝檔案來做的,但是實現的方式不同,前者是以page為粒度做的(xtrabackup),後者是 cp 或者 tar 命令(innobackupex),xtrabackup 在讀取每個page時會校驗 checksum 值,保證資料塊是一致的,

而 innobackupex 在 cp myisam 檔案時已經做了flush(ftwrl),磁碟上的檔案也是完整的,所以最終備份集裡的資料檔案都是寫入完整的。

6、增量備份解析

pxb 是支援增量備份的,但是只能對 innodb 做增量,innodb 每個 page 有個 lsn 號,lsn 是全域性遞增的,page被更改時會記錄當前的 lsn 號,page中的 lsn 越大,說明當前page越新(最近被更新)。

每次備份會記錄當前備份到的lsn(xtrabackup_checkpoints 檔案中),增量備份就是只拷貝lsn大於上次備份的page,比上次備份小的跳過,每個 ibd 檔案最終備份出來的是增量 delta 檔案。

myisam 是沒有增量的機制的,每次增量備份都是全部拷貝的。

增量備份過程和全量備份一樣,只是在ibd 檔案拷貝上有不同。

7、恢復過程解析

如果看恢復備份集的日誌,會發現和 mysqld 啟動時非常相似,其實備份集的恢復就是類似 mysqld crash後,做一次 crash recover。

恢復的目的是把備份集中的資料恢復到乙個一致性位點,所謂一致就是指原資料庫某一時間點各引擎資料的狀態,比如 myisam 中的資料對應的是

15:00 時間點的,innodb 中的資料對應的是 15:20

的,這種狀態的資料就是不一致的。

pxb 備份集對應的一致點,就是備份時ftwrl的時間點,恢復出來的資料,就對應原資料庫ftwrl時的狀態。

因為備份時 ftwrl 後,資料庫是處於唯讀的,非 innodb 資料是在持有全域性讀鎖情況下拷貝的,所以非 innodb 資料本身就對應 ftwrl 時間點;innodb 的 ibd 檔案拷貝是在 ftwrl 前做的,拷貝出來的不同 ibd 檔案最後更新時間點是不一樣的,

這種狀態的 ibd 檔案是不能直接用的,但是 redo log 是從備份開始一直持續拷貝的,最後的 redo 日誌點是在持有 ftwrl 後取得的,所以最終通過 redo 應用後的 ibd 資料時間點也是和 ftwrl 一致的。

所以恢復過程只涉及 innodb 檔案的恢復,非 innodb 資料是不動的。備份恢復完成後,就可以把資料檔案拷貝到對應的目錄,然後通過mysqld來啟動了。

Oracle增量備份原理

rman乙個強大的功能是支援增量備份,增量備份中心思想就是減少備份的資料量,我們不需要在從頭開始備份了,只需要備份自上次已備份之後的資料塊即可。關於incremental增量備份級別 oracle 9i 共有五種級別 0 1 2 3 4,0級最高 4級最低,0級是1級的基礎以此類推。oracle 1...

初探MySQL資料備份及備份原理

根據需求的不同,資料備份的方式也不同,mysql官方給定的備份方式有三種,分別是冷備 熱備和溫備 如果以備份的資料集為劃分標準,那麼可劃分為完全備份和部分備份 如果是以備份時的介面為劃分標準,那麼可分為物理備份 邏輯備份 完全備份 增量備份和差異備份。後面兩種備份的分類方式比較容易理解,下面我們著重...

SQL Server差異備份的備份 還原原理

記住一點 差異備份是基於最後一次完整備份的差異,而不是基於最後一次差異的差異 備份過程 1 完整備份之後有無對資料庫做過修改,如果有,記錄資料庫的最後lsn last lsn 如果完整備份之後無對資料庫做過修改,那麼差異備份就沒有意義了 2 做差異備份時根據差異位圖讀取差異頁面內容 注意 差異位圖記...