percona xtrabackup是一款基於mysql的熱備份的開源實用程式,它可以備份5.1到5.7版本上innodb,xtradb,myisam儲存引擎的表,
xtrabackup有兩個主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能備份innodb和xtradb兩種資料表,而不能備份myisam資料表
(2)innobackupex則封裝了xtrabackup,是乙個指令碼封裝,所以能同時備份處理innodb和myisam,但在處理myisam時需要加乙個讀鎖
首先我們先來簡單的了解一下xtrabackup是怎麼工作的。xtrabackup基於innodb的crash-recovery(例項恢復)功能,先copy innodb的物理檔案(這個時候資料的一致性是無法滿足的),然後進行基於redo log進行恢復,達到資料的一致性。詳細的資訊可以引數 我就不翻譯了。
我們還是簡單的來看一下日常工作中具體的使用:
全備:xtrabackup --backup --target-dir=/data/backup/base
可以先看到
在備份過程中,可以看到很多輸出顯示資料檔案被複製,以及日誌檔案執行緒反覆掃瞄日誌檔案和複製。
同樣的它也輸出了當前的binlog filename和position,如果有gtid(同樣也會輸出) 可以用於搭建主從。最後一行一定會是你的lsn被copy的資訊。
這是因為每次啟動備份,都會記錄170429 12:54:10 >> log scanned up to (1676085)),然後開始拷貝檔案,一般來講資料庫越大拷貝檔案是要花費越長的時間,所以說這期間一般情況都會有新的操作,所以說所有檔案也可能記錄的並不是乙個時間點的資料,
為了解決資料這個問題,xtrabackup 就會啟動乙個後台程序來每秒1次的觀測mysql的事務日誌,直到備份結束。而且把事務日誌中的改變記錄下來。我們知道事物日誌是會重用的(redo log),所以這個程序會把redolog寫到自己的日誌檔案xtrabackup_log,這個後台監控程序會記錄所有的事務日誌的改變,用於保證資料一致性所。
增量備份:
當我們做過全量備份以後會在目錄下產生xtrabackup_checkpoints的檔案 這裡面記錄了lsn和備份方式,我們可以基於這次的全量做增量的備份。
$cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 1676085
last_lsn = 1676085
compact = 0
recover_binlog_info = 0
xtrabackup --backup --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/base
這個時候xtrabackup也是去開啟了xtrabackup_checkpoints檔案進行上一次備份的資訊檢視。這個時候去檢視增量備份的xtrabackup_checkpoints也記錄了這些資訊
$cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1676085
to_lsn = 1676085
last_lsn = 1676085
compact = 0
recover_binlog_info = 0
這也意味著你可以在增量的備份上繼續增量的備份。
同樣的xtrabackup也支援壓縮(--compress)、加密(--encrypt)、並行(--parallel)等操作,但是和mysqlbackup不同的是這個沒有同時的備份binlog,而mysqlbackup是備份了binlog的。
我們來模擬乙個恢復的過程深入的了解一下原理
檢視當前資料:
dbadmin@test 03:04:33>select * from t;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
全量備份
$xtrabackup --backup --target-dir=/data/backup/base
模擬增量資料
dbadmin@test 03:07:16>select * from t;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
進行增量備份:
$xtrabackup --backup --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/base
模擬無備份操作:
dbadmin@test 03:09:42>select * from t;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
模擬誤操作:
dbadmin@test 03:09:45>truncate table t;
query ok, 0 rows affected (0.00 sec)
摸擬恢復操作:
step 1:找到誤操作的log position
dbadmin@test 03:10:19>show master logs;
dbadmin@test 03:10:47>show binlog events in 'mysql-bin.000001';
1333
如果我們使用它自帶的還原命令的時候就要先把data目錄給清空。不然就會報如下的錯誤
$innobackupex --copy-back /data/backup/base/
170429 15:37:19 innobackupex: starting the copy-back operation
important: please check that the copy-back run completes successfully.
at the end of a successful copy-back run innobackupex
prints "completed ok!".
innobackupex version 2.4.6 based on mysql server 5.7.13 linux (x86_64) (revision id: 8ec05b7)
original data directory /u01/my3307/data is not empty!
當然我們大多數據時候是不會在原來的例項上做操作的,都會把相應的備份在奇他的例項上進行恢復,然後再匯出匯入到誤操作的例項。這裡我們直接清掉目錄,然後再次執行,檢視恢復後的資料:
dbadmin@test 03:41:56>select * from t;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
同樣的被恢復的目錄裡會多出來兩個檔案,乙個是xtrabackup_binlog_pos_innodb,乙個是xtrabackup_info。在這兩個檔案中都可以看到你最後的log,pos。在info裡還可以看到lsn。我們基於這個pos再進行binlog的重演,恢復在binlog沒有被備份的資料。
1076
$mysqlbinlog mysql-bin.000001 --start-position=1076 --stop-position=1333 -vv >increment.sql
dbadmin@test 03:51:25>source /u01/my3307/log/increment.sql
dbadmin@test 03:51:34>select * from t;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
至此資料恢復完成
深圳逆時針
xtrabackup備份mysql資料庫
xtrabackup備份mysql資料庫 1.安裝依賴包 perl dbd mysql需要mysql libs 5.1.73包,如果此包和現有mysql server衝突,需要單獨用rpm force強制安裝此包 2.安裝xtrabackup rpm ivh percona xtrabackup 2...
資料庫備份與恢復 XtraBackup
使用xtrabackup工具安裝percona rpm ivh libev 4.15 1.el6.rf.x86 64.rpm yum y install percona xtrabackup 24 2.4.7 1.el7.x86 64.rpm 命令幫助 innobackupex help 常用選項 ...
xtrabackup進行資料庫備份
最近需要將線上資料庫的資料同步到線下測試環境,所以在找資料庫同步的方法,發現了xtrabackup這個工具,便想試下是否可行。開源,免費,備份速度快,感覺挺強大有木有,廢話不多說,開始安裝。wget rpm ivh percona release 0.1 4.noarch.rpm yum y nog...