Xtrabackup 官網Review手稿
Edit
目錄
xtrabackup 備份機制
Full Backups
Create a Backup
備份命令
xtrabackup--backup--target-dir=/Directory
如果InnoDB data 或者 log file不儲存在同目錄下,需要專門指定數據位置
如果目的文件夾不存在,xtrabackup會自動創建,如果目錄存在並且為空,xtrabacup則執行成功。xtrabackup不會覆蓋已經存在的文件 ,文件存在則會返回系統error : syserror error 17。
如果指定是的相對目錄,則目的文件夾從當前目錄開始。
備份過程中會有很多輸出顯示 數據文件的拷貝過程,
最後輸出範例:
160906 10:19:17 Finished backing up non-InnoDB tables and files
160906 10:19:17 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
xtrabackup: The latest check point (for incremental): "62988944"
xtrabackup: Stopping log copying thread.
160906 10:19:18 Executing UNLOCK TABLES
160906 10:19:18 All tables unlocked
160906 10:19:18 Backup created in directory "/data/backups/"
160906 10:19:18 [00] Writing backup-my.cnf
160906 10:19:18 [00] ...done
160906 10:19:18 [00] Writing xtrabackup_info
160906 10:19:18 [00] ...done
160906 10:19:18 completed OK!
在輸出信息的最後,你會看到lsn依賴系統信息的lsn信息
xtrabackup: Transactionlogof lsn ()to() was copied.
Note
日誌複製線程會時刻檢查事務日誌確認是否有新的需要被複制的日誌記錄,但是潛在風險是日誌拷貝線程無法承受大並發事務日誌的寫入,如果舊日誌被複寫前檢查線程沒有讀到也將觸發錯誤。
備份結束後,目標文件來通常會包括如下這些文件,假設你已經有了一個單InnoDB表test.tbl1,那你的目錄下通常會有這些文件 :
$ ls -lh /data/backups/
total 182M
drwx------7root root 4.0K Sep610:19 .
drwxrwxrwt 11 root root 4.0K Sep 6 11:05 ..
-rw-r----- 1 root root 387 Sep 6 10:19 backup-my.cnf
-rw-r----- 1 root root 76M Sep 6 10:19 ibdata1
drwx------2root root 4.0K Sep610:19 mysql
drwx------ 2 root root 4.0K Sep 6 10:19 performance_schema
drwx------ 2 root root 4.0K Sep 6 10:19 sbtest
drwx------ 2 root root 4.0K Sep 6 10:19 test
drwx------ 2 root root 4.0K Sep 6 10:19 world2
-rw-r----- 1 root root 116 Sep 6 10:19 xtrabackup_checkpoints
-rw-r----- 1 root root 433 Sep 6 10:19 xtrabackup_info
-rw-r-----1root root 106M Sep610:19 xtrabackup_logfile
備份時長取決於資料庫容量大小,期間你可以任意停止,因為其不操作資料庫。
Preparing a backup
做好備份後,這些備份要隨意準備用來應對意外,隨時可能被恢復。數據文件的時間點是不一致的直至他們真正被準備好,數據不一致是因為這些文件並非同時被複制,在這個拷貝的過程中程序還處於運行狀態,而且拷貝後他們也隨時可能會發生改變。如果我們使用提InnoDB引擎,InooDB在數據恢復前將檢測臟數據然後自我銷毀進程,即我們無法使用壞數據或者臟數據。--prepare該操作將保持數據的一致性,如此,才能真正用做數據恢復。
--prepare可以在任意安排有xtrabackup的主機上操作,無需在執行備份命令的伺服器上操作,因此,我們可以複製備份到任意應用伺服器來prepare。
Note
xtrabackup --prepare命令新版本支持向下兼容,但舊版本無法操作新版本。因此在其它機器上執行時一定要確認版本。舉例:MySQL 5.0 使用 Xtrabackup 1.6版本備份, 使用xtrabackup 2.3版本進行preparing 備份是不支持,因為 MySQL 5.0的支持在 xtrabackup 2.1的時候被取消了,因此使用2.0的版本即可。
在Prepare期間,xtrabackup啟動一種修改InnoDB的嵌入操作。這些變更需要禁用InnoDB的安全標準檢查,比如: 日誌文件大小檢查。這些檢查只是xtrabackup 二進位,我們不需要使用xtrabackup修改InnoDB。
prepare 使用 「embedded InnoDB」基於拷貝日誌來為複製的備份修復損壞數據。命令使用很簡單,只需要指定--prepare參數和要prepare的操作目錄即可。
$xtrabackup--prepare--target-dir=/data/backups/
命令執行結束後,你將會看到InnoDB shutdown的信息,lsn的信息主要依賴於個人系統不同而不同。
InnoDB: Shutdown completed;logsequencenumber137345046
16090611:21:01completed OK!
如果已經做過prepare的修復操作或者無須修復,你將看到如下的類似信息。
xtrabackup:This target seems to be already prepared.
xtrabackup:notice:xtrabackup_logfile was already used to"--prepare".
在preparing backup的過程最好不要意外中段,因為這將導致數據文件損壞,備份也將不可用。備份的有效性也會因為Prepare進程被中段而不可信。
Note
如果你還要使用以前的差量備份,你在prepareing的時候需要使用xtrabackup --apply-log-only參數,否則是無法使用差量 備份來恢複數據的。
Restoring a Backup
恢復前一定需要prepared
方便起見,xtrabackup使用 –copy-back 選項,該選項可以複製備份到伺服器的數據文件 。
$ xtrabackup --copy-back--target-dir=/data/backups/
同樣,也可以直接使用類型Linux下的move操作。xtrabackup --move-back
如果都不想使用,Linux下的系統命令 rsync 或者 cp都可以使用。
note
datadir的目標目錄必須是空目錄。操作之前MySQL服務必須處於關閉狀態!!
$ rsync -avrP/data/backup/ /var/lib/mysql/
之前,也必須保持目錄和恢復的文件的許可權是正常的。如果不正常手動修正。
$ chown -Rmysql:mysql /var/lib/mysql
恢復完畢後,就可以啟動MySQL服務了。
增量備份
備份原理
使用Innobackupex 做Local Full Backup: Create, Prepare 和 Restore
創建全備
$ innobackupex /data/backups
執行完命令後會有很多輸出,看到類似如下的輸出才算正常
10031302:43:07innobackupex: completed OK!
Prepare the Backup
使用 –apply-log 參數並指定全備的具體目錄,為了提升速度,你可以指定 –use-memory來指定使用的內存大小
$ innobackupex --use-memory=4G --apply-log /data/backups/2010-03-13_02-42-44/
看到如下類似輸出才算正常
10031302:51:02innobackupex: completed OK!
如此以來,/data/backups/2010-03-13_02-42-44 is 將被準備用於Retore。
恢復備份
stop 程序
執行innobackupex命令
innobackupex --copy-back /data/backups/2010-03-13_02-42-44/
## Use chmod to correct the permissions, if necessary!
Note
目標目錄必須是空的。 innobackupex –copy-back 參數不會覆蓋已經存在的文件 ,除非指定強制覆蓋,nnobackupex –force-non-empty-directories 。首先MySQL的
差備
innobackupex--incremental/path/to/inc/dir--incremental-basedir=$FULLBACKUP--user=USER--password=PASSWORD
preparing 差備文件
prepare 全備文件
必須重新提交事情在每個全備文件上
innobackupex--apply-log--redo-only$FULLBACKUP--use-memory=1G--user=USER--password=PASSWORD
看到有類似如下輸出時認為正常
11122501:10:12InnoDB: Shutdown completed;logsequence number91514213
prepare 差量文件
其次再應用到差備文件上。
innobackupex--apply-log--redo-only$FULLBACKUP
--incremental-dir=$INCREMENTALBACKUP
--use-memory=1G--user=DVADER--password=D4RKS1D3
全備
全備
xtrabackup--backup--target-dir=/data/backups/mysql/
prepare兩次
xtrabackup --prepare --target-dir=/data/backups/mysql/
xtrabackup --prepare --target-dir=/data/backups/mysql/
第二次執行的時候要看到類似如下的輸出:
In the second –prepare step, you should see InnoDB print messages similar to Log file ./ib_logfile0 did not exist: new to be created, followed by a line indicating the log file was created (creating new logs is the purpose of the second preparation).
差備
差備必須基於全備進行,所以 要先做全備
xtrabackup –backup –target-dir=/data/backups/mysql/
需要注意的是,這裡一定不能運行--prepare命令
創建兩次差備
Suppose the full backup is on Monday, and you will create an incremental one on Tuesday:
xtrabackup --backup --target-dir=/data/backups/inc/tue/
--incremental-basedir=/data/backups/mysql/
and the same policy is applied on Wednesday:
xtrabackup --backup --target-dir=/data/backups/inc/wed/
--incremental-basedir=/data/backups/inc/tue/
Prepare the base backup
Prepare the base backup (Monday』s backup):
xtrabackup --prepare --apply-log-only--target-dir=/data/backups/mysql/
Roll forward the base data to the first increment
Roll Monday』s data forward to the state on Tuesday:
xtrabackup --prepare --apply-log-only--target-dir=/data/backups/mysql/
--incremental-dir=/data/backups/inc/tue/
Roll forward again to the second increment
Roll forward again to the state on Wednesday:
xtrabackup --prepare --apply-log-only--target-dir=/data/backups/mysql/
--incremental-dir=/data/backups/inc/wed/
Prepare the whole backup to be ready to use
Create the new logs by preparing it:
xtrabackup --prepare --target-dir=/data/backups/mysql/
TAG:松鼠派 |