XtraBackup備份MySQL
XtraBackup是一款開源免費的MySQL熱備份軟體。
對於MyISAM,他使用鎖機制進行全量備份。
對於InnoDB,他啟用類似歸檔的方式,不僅可以進行全量備份,還可以進行增量備份。
全量備份大致過程如下,
首先,找到備份開始時檢查點的LSN,複製此LSN之後的重做日誌到xtrabackup_log。
然後,開始複製InnoDB的資料檔案。
由於此時資料檔案還在不斷寫入,而且重做日誌檔案可能被覆蓋。所以XtraBackup有一個程式不斷複製變化的重做日誌到xtrabackup_log。這種方式參考Oracle歸檔模式的熱備份。
但是還有一個問題,就是MySQL的資料塊預設16K,而作業系統的塊,windows預設為512位元組,linux預設為1024位元組。
很有可能在複製的過程中,MySQL塊的若干作業系統塊被更新,但是整個MySQL塊卻沒有更新完成。這樣會造成資料塊的不一致。這種情況會影響重做日誌的前滾恢復。
我猜測MySQL的處理方式是參考Oracle.如果一個MySQL塊需要更新,則將這個準備寫入的塊的映象同redo log一起寫入重做日誌檔案。
資料恢復的時候,則使用重做日誌檔案中的資料塊映象apply redo log即可。
步驟3備份的是MyISAM表,採用了鎖的機制。
在MyISAM表備份完成之後,解鎖。此時,就是備份完成的時刻。
在MyISAM備份的過程中,InnoDB的redo log還是會不斷的寫入xtrabackup_log。
與Oracle不同的是,xtrabackup是先恢復再還原。
它的prepare過程,實際上就是Oracle對資料檔案應用歸檔重做日誌和聯機重做日誌的過程。
只不過xtrabackup將兩種日誌合併在了一個檔案中(xtrabackup_log),並且他的歸檔日誌僅僅包含從備份開始到MyISAM備份結束這一小段範圍的重做日誌。
在恢復的過程中,xtrabackup會啟動內部的一個InnoDB例項(xtrabackup自帶的),他根據備份的資料檔案應用重做日誌前滾資料,然後回滾未提交的資料。這個應該和Oracle是一樣的。
回滾的過程
xtrabackup支援增量備份。
對於MyISAM來說,任何增量備份的操作都是一個全備.
而對於InnoDB,他會根據一個全量備份的LSN,複製資料檔案中大於此LSN的資料塊。
恢復增量備份時,先恢復全量備份,然後依次對增量備份進行恢復。
下面透過實驗證明xtrabackup在複製檔案的過程中會開啟歸檔特性。
初始化實驗表結構,並初始化4條資料.
create table test(a int primary key,b int,key(b)) engine=innodb;
call insertrange(1,5);
重做日誌大小為5M
下面開啟一個終端,使用insertrange過程插入100W條資料
同時啟動另外一個終端,開始全量備份
備份過程會記錄一個開始的檢查點LSN
在備份的過程中,會不斷將重做日誌寫入xtrabackup_log,類似歸檔日誌的作用
備份非InnoDB資料
在非InnoDB資料備份之後,停止備份重做日誌,備份結束.
1582081210應該就是備份結束的時間點,增量備份以這個LSN為基準。
值得注意的是備份的重做日誌檔案比MySQL設定的重做日誌檔案要大,證明了備份的過程如果發生了日誌切換,會將歸檔的日誌寫入xtrabackup_log
xtrabackup的使用請參考:
http://blog.csdn.net/justdb/article/details/17054667
備份原理參考:
對於MyISAM,他使用鎖機制進行全量備份。
對於InnoDB,他啟用類似歸檔的方式,不僅可以進行全量備份,還可以進行增量備份。
全量備份大致過程如下,
首先,找到備份開始時檢查點的LSN,複製此LSN之後的重做日誌到xtrabackup_log。
然後,開始複製InnoDB的資料檔案。
由於此時資料檔案還在不斷寫入,而且重做日誌檔案可能被覆蓋。所以XtraBackup有一個程式不斷複製變化的重做日誌到xtrabackup_log。這種方式參考Oracle歸檔模式的熱備份。
但是還有一個問題,就是MySQL的資料塊預設16K,而作業系統的塊,windows預設為512位元組,linux預設為1024位元組。
很有可能在複製的過程中,MySQL塊的若干作業系統塊被更新,但是整個MySQL塊卻沒有更新完成。這樣會造成資料塊的不一致。這種情況會影響重做日誌的前滾恢復。
我猜測MySQL的處理方式是參考Oracle.如果一個MySQL塊需要更新,則將這個準備寫入的塊的映象同redo log一起寫入重做日誌檔案。
資料恢復的時候,則使用重做日誌檔案中的資料塊映象apply redo log即可。
步驟3備份的是MyISAM表,採用了鎖的機制。
在MyISAM表備份完成之後,解鎖。此時,就是備份完成的時刻。
在MyISAM備份的過程中,InnoDB的redo log還是會不斷的寫入xtrabackup_log。
與Oracle不同的是,xtrabackup是先恢復再還原。
它的prepare過程,實際上就是Oracle對資料檔案應用歸檔重做日誌和聯機重做日誌的過程。
只不過xtrabackup將兩種日誌合併在了一個檔案中(xtrabackup_log),並且他的歸檔日誌僅僅包含從備份開始到MyISAM備份結束這一小段範圍的重做日誌。
在恢復的過程中,xtrabackup會啟動內部的一個InnoDB例項(xtrabackup自帶的),他根據備份的資料檔案應用重做日誌前滾資料,然後回滾未提交的資料。這個應該和Oracle是一樣的。
回滾的過程
xtrabackup支援增量備份。
對於MyISAM來說,任何增量備份的操作都是一個全備.
而對於InnoDB,他會根據一個全量備份的LSN,複製資料檔案中大於此LSN的資料塊。
恢復增量備份時,先恢復全量備份,然後依次對增量備份進行恢復。
下面透過實驗證明xtrabackup在複製檔案的過程中會開啟歸檔特性。
初始化實驗表結構,並初始化4條資料.
create table test(a int primary key,b int,key(b)) engine=innodb;
-
delimiter //
-
Create Procedure insertrange(in s int,in e int)
-
begin
-
declare i int;
-
set i = s;
-
start transaction;
-
while i<e do
-
insert into test values(i,i);
-
set i=i+1;
-
end while;
-
commit;
-
end
-
//
- delimiter ;
重做日誌大小為5M
下面開啟一個終端,使用insertrange過程插入100W條資料
同時啟動另外一個終端,開始全量備份
備份過程會記錄一個開始的檢查點LSN
在備份的過程中,會不斷將重做日誌寫入xtrabackup_log,類似歸檔日誌的作用
備份非InnoDB資料
在非InnoDB資料備份之後,停止備份重做日誌,備份結束.
1582081210應該就是備份結束的時間點,增量備份以這個LSN為基準。
值得注意的是備份的重做日誌檔案比MySQL設定的重做日誌檔案要大,證明了備份的過程如果發生了日誌切換,會將歸檔的日誌寫入xtrabackup_log
xtrabackup的使用請參考:
http://blog.csdn.net/justdb/article/details/17054667
備份原理參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1082297/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL:xtrabackup備份MySql
- xtrabackup備份mysql innodbMySql
- MySQL · 物理備份 · Percona XtraBackup 備份原理MySql
- 【MySql】 MySql備份工具Xtrabackup之二MySql
- 【MySql】 MySql備份工具Xtrabackup之一MySql
- 使用Xtrabackup遠端備份MysqlMySql
- Percona Xtrabackup 快速備份 MySQLMySql
- 配置xtrabackup備份mysql資料庫MySql資料庫
- 使用Xtrabackup備份mysql資料庫MySql資料庫
- XtraBackup 2.2.8 釋出,MySQL 備份工具MySql
- Mysql 物理備份工具xtrabackup的使用MySql
- xtrabackup備份mysql“ib_logfile0 is ofMySql
- MySQL Backup--Xtrabackup備份限速問題MySql
- 【MySQL】Xtrabackup備份及恢復指令碼MySql指令碼
- 【Mysql】xtrabackup 備份和恢復測試MySql
- (轉)使用Xtrabackup備份MySQL資料庫MySql資料庫
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- mysql之 xtrabackup原理、備份日誌分析、備份資訊獲取MySql
- 【Xtrabackup】Xtrabackup備份基礎知識
- 【MySQL】xtrabackup 2.4.12備份觸發的bugMySql
- Xtrabackup備份報錯Failed to connect to MySQL serverAIMySqlServer
- MySQL Xtrabackup備份原理和實現細節MySql
- MySQL DBA備份工具Xtrabackup使用指南(轉)MySql
- mysql innobackupex xtrabackup 大資料量 備份 還原MySql大資料
- mysql備份和恢復測試(一)--xtrabackupMySql
- (轉)使用Xtrabackup備份MySQL資料庫(續)MySql資料庫
- 【Xtrabackup】Xtrabackup全備、增量備份及恢復示例
- mysql資料庫xtrabackup壓縮備份測試MySql資料庫
- 使用xtrabackup對mysql進行備份和恢復MySql
- 建立MySQL資料庫備份的好工具:XtraBackupMySql資料庫
- mysql xtrabackup在windows平臺的備份測試MySqlWindows
- 使用 xtrabackup 進行MySQL資料庫物理備份MySql資料庫
- XtraBackup完整備份與增量備份的原理
- XtraBackup實踐(一)備份
- Xtrabackup備份恢復原理
- MySQL運維實戰之備份和恢復(8.1)xtrabackup全量備份MySql運維
- xtrabackup備份mysql以及建立自動定時任務MySql
- 轉享:使用Xtrabackup實現MySQL備份和還原。MySql