innobackupex在線備份及恢復

[MySQL] innobackupex在線備份及恢復(全量和增量)

安裝

首先,通過wget下載源碼tar包:

[plain]

wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/source/percona-xtrabackup-2.1.5.tar.gz

安裝依賴包:

yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel

解壓縮tar:

tar -zxvf percona-xtrabackup-2.1.5.tar.gz

cd percona-xtrabackup-2.1.5

utils/build.sh腳本會根據指定的引擎版本,自動解壓縮適當的MySQL源碼包並進行編譯,這是最簡單的安裝方式。當你在命令行下不帶任何參數執行該腳本時,出現如下提示:

[mysql@epay100 ~/software/percona-xtrabackup-2.1.5 ]$ ./utils/build.sh

Build an xtrabackup binary against the specified InnoDB flavor.

Usage: build.sh CODEBASE

where CODEBASE can be one of the following values or aliases:

innodb51 | plugin build against InnoDB plugin in MySQL 5.1

innodb55 | 5.5 build against InnoDB in MySQL 5.5

innodb56 | 5.6,xtradb56, build against InnoDB in MySQL 5.6

| mariadb100

xtradb51 | xtradb,mariadb51 build against Percona Server with XtraDB 5.1

| mariadb52,mariadb53

xtradb55 | galera55,mariadb55 build against Percona Server with XtraDB 5.5

根據上面提示和你使用的存儲引擎及版本,選擇相應的參數即可。因爲我用的是MySQL 5.6,所以執行如下語句安裝:

./utils/build.sh innodb56

以上語句執行成功後,表示安裝完成。最後,把生成的二進制文件拷貝到一個自定義目錄下(本例中爲/home/mysql/admin/bin/percona-xtrabackup-2.1.5),並把該目錄放到環境變量PATH中。

cp ./innobackupex /home/mysql/admin/bin/percona-xtrabackup-2.1.5

cp ./src/xtrabackup_56 ./src/xbstream /home/mysql/admin/bin/percona-xtrabackup-2.1.5

全備及其恢復

全備

執行如下語句進行全備:

innobackupex --defaults-file=/opt/mysql/my.cnf --user=root --password=*** /backup/mysql/data

該語句將拷貝數據文件(由my.cnf裏的變量datadir指定)至備份目錄下(/backup/mysql/data),注意:如果不指定--defaults-file,默認值爲/etc/my.cnf。

備份成功後,將在備份目錄下創建一個時間戳目錄(本例創建的目錄爲/backup/mysql/data/2013-10-29_09-05-25),在該目錄下存放備份文件。

恢復:

innobackupex --defaults-file=/opt/mysql/my.cnf --user=root --password=*** --use-memory=4G --apply-log /backup/mysql/data/2013-10-29_09-05-25

innobackupex --defaults-file=/opt/mysql/my.cnf --user=root --password=*** --copy-back /backup/mysql/data/2013-10-29_09-05-25

從什麼可以看出,恢復分爲兩個步驟,第1步是apply-log,爲了加快速度,一般建議設置--use-memory,這個步驟完成之後,目錄/backup/mysql/data/2013-10-29_09-05-25下的備份文件已經準備就緒。

第2步是copy-back,即把備份文件拷貝至原數據目錄下。

恢復完成之後,一定要記得檢查數據目錄的所有者和權限是否正確。

增量備份及其恢復

注意:innobackupex 增量備份僅針對InnoDB這類支持事務的引擎,對於MyISAM等引擎,則仍然是全備。

增量備份:

增量備份需要基於全備,先假設我們已經有了一個全備(/backup/mysql/data/2013-10-29_09-05-25),在該全表的基礎上做增量備份。

innobackupex --defaults-file=/opt/mysql/my.cnf --user=root --password=*** --incremental-basedir=/backup/mysql/data/2013-10-29_09-05-25 --incremental /backup/mysql/data

其中--incremental-basedir指向全備目錄,--incremental指向增量備份的目錄。

上面語句執行成功之後,會在--incremental執行的目錄下創建一個時間戳子目錄(本例中爲:/backup/mysql/data/2013-10-29_09-52-37),在該目錄下存放着增量備份的所有文件。

在備份目錄下,有一個文件xtrabackup_checkpoints記錄着備份信息,全備的信息如下:

backup_type = full-backuped

from_lsn = 0

to_lsn = 563759005914

last_lsn = 563759005914

基於該全備的增量備份的信息如下:

backup_type = incremental

from_lsn = 563759005914

to_lsn = 574765133284

last_lsn = 574765133284

從上面可以看出,增量備份的from_lsn正好等於全備的to_lsn。

那麼,我們是否可以在增量備份的基礎上再做增量備份呢?答案是肯定的,只要把--incremental-basedir執行上一次增量備份的目錄即可,如下所示:

innobackupex --defaults-file=/opt/mysql/my.cnf --user=root --password=*** --incremental-basedir=/backup/mysql/data/2013-10-29_09-52-37 --incremental /backup/mysql/data

它的xtrabackup_checkpoints記錄着備份信息如下:

backup_type = incremental

from_lsn = 574765133284

to_lsn = 574770200380

last_lsn = 574770200950

可以看到,該增量備份的from_lsn是從上一次增量備份的to_lsn開始的。

恢復:

增量備份的恢復比全備要複雜很多,第一步是在所有備份目錄下重做已提交的日誌,如:

innobackupex --apply-log --redo-only BASE-DIR

innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

其中BASE-DIR是指全備目錄,INCREMENTAL-DIR-1是指第一次的增量備份,INCREMENTAL-DIR-2是指第二次的增量備份,以此類推。

這裏要注意的是:最後一步的增量備份並沒有--redo-only選項!還有,可以使用--use_memory提高性能。

以上語句執行成功之後,最終數據在BASE-DIR(即全備目錄)下。

第一步完成之後,我們開始第二步:回滾未完成的日誌:

innobackupex --apply-log BASE-DIR

上面執行完之後,BASE-DIR裏的備份文件已完全準備就緒,最後一步是拷貝:

innobackupex --copy-back BASE-DIR

同樣地,拷貝結束之後,記得檢查下數據目錄的權限是否正確。

常見錯誤及解決方法

錯誤:

131028 17:45:57 innobackupex: Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup' (using password: NO).

innobackupex: Error: Failed to connect to MySQL server as DBD::mysql module is not installed at /home/mysql/admin/bin/percona-xtrabackup-2.1.5/innobackupex line 2913.

解決方法:

[plain]

yum -y install perl-DBD-MySQL.x86_64


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章