當前位置:
首頁 > 最新 > Xtrabackup 官網Review手稿

Xtrabackup 官網Review手稿

Edit

目錄


xtrabackup 備份機制

備份命令

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

備份時長取決於資料庫容量大小,期間你可以任意停止,因為其不操作資料庫。


做好備份後,這些備份要隨意準備用來應對意外,隨時可能被恢復。數據文件的時間點是不一致的直至他們真正被準備好,數據不一致是因為這些文件並非同時被複制,在這個拷貝的過程中程序還處於運行狀態,而且拷貝後他們也隨時可能會發生改變。如果我們使用提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參數,否則是無法使用差量 備份來恢複數據的。


恢復前一定需要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!

使用 –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


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/


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 松鼠派 的精彩文章:

程序員內功系列-iTerm與Zsh篇

TAG:松鼠派 |