一.安裝包

下載XtraBackup:

http://www.percona.com/mysql/xtrabackup/0.8/source/

這里下載的是0.8版本的源碼包

下載MySQL源碼包:

http://dev.mysql.com/downloads/mysql/5.0.html#source

因為是編譯安裝XtraBackup,需要使用MySQL的源代碼

對于64位的系統,可以直接下載編譯好的包:

http://www.percona.com/mysql/xtrabackup/0.8/Linux/xtrabackup-0.8.tar.gz

 

二、 編譯安裝

測試發現在mysql4.1下面編譯XtraBackup會出錯,使用mysql5.0編譯就可以,生成的可執行文件對mysql4.1同樣適用

你也可以下載對應平臺的二進制版本XtraBackup,免去編譯安裝的步驟,不過目前二進制版本支持的平臺并不多,所以這里列出編譯的步驟。

#如果使用的是MySQL5.1,目錄改為/mysql-5.1.*/ storage/innobase/

cd mysql-5.0.85/ innobase #進入源代碼目錄

patch –p2 < . /xtrabackup-0.8-src/fix_innodb_for_backup.patch #給InnoDB源碼打上補丁

#如果使用的是MySQL5.1,使用fix_innodb_for_backup51.patch

cd .. #進入目錄mysql-5.0.85

./configure

make #我們只需要Make就可以了,不需要Make install

cd innobase/xtrabackup-0.8-src

make #編譯XtraBackup;MySQL5.1必須要使用XtraBackup0.9

編譯成功后,我們會獲得可執行文件xtrabackup、innobackupex。為了方便使用,分別將其拷貝到某個$PATH路徑下。(我這里/u01/mysql/bin/是$PATH路徑的一部分)

cp xtrabackup /usr/local/bin/

cp innobackupex-1.5.1 /usr/local/bin/

此步必須否則運行innobackupex-1.5.1會報錯,找不到xtrabackup.

安裝中要注意的問題:

編譯XtraBackup;MySQL5.1必須要使用XtraBackup0.9。

另外,使用MySQL5.1編譯,需要簡單的修改一下XtraBackup的Makefile:

#MySQL 5.0

#INC= -I. -I.. -I./../include -I./../../include

#INNODBOBJS=

#MySQL 5.1

INC= ……

MYSQLOBJS=

安裝完成后,我們就可以使用命令innobackupex來備份我們的數據庫了。

三、 備份

XtraBackup使用腳本innobackupx-1.5.1來備份你的數據庫。關于innobackupx-1.5.1的詳細參數,請參考http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual。這里列出比較常用的備份命令:普通備份、打包(Tar)備份、壓縮(Tar gzip)備份。

需要注意的是,innobackupex-1.5.1會根據你的/etc/my.cnf配置,來確定你的MySQL數據位置(datadir),所以你并不需要告訴innobackupex-1.5.1你的MySQL數據在哪兒。注意my.cnf里面必須指定datadir,innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir,innodb_log_arch_dir等信息

1. 普通備份

innobackupex-1.5.1 --user=root --password=123 /data/innobackup/ 2>/data/1.log

備份時間3分38秒;3G的表空間,InnoDB Free 2595840 Kb。

這里我們使用mysql的root用戶備份,密碼為123。備份的目標目錄(target dir)是/data/innobackup/,innobackupex-1.5.1將在該目錄下生成備份。例如/data/innobackup/2009-09-01_11-59-29就是我執行腳本后生成的備份,所有的備份文件都在該./2009-09-01_11-59-29目錄下。

這里的2>/data/1.log,是將備份過程中的輸出信息重定向到1.log。另外innobackupex-1.5.1還支持增量備份,這里并沒有測試使用。

 

那如何恢復呢?為了模擬恢復過程,我先將MySQL停止,并刪除MySQL的data目錄下所有數據文件。

cd mysql/data/ ;rm --rf *;

innobackupex-1.5.1 --apply-log /data/innobackup/2009-09-01_11-59-29

innobackupex-1.5.1 --copy-back /data/innobackup/2009-09-01_11-59-29

cd /usr/local/mysql/data/

chown -R mysql:dba . #(這時候可能還需要修改datadir修改文件的所有者)

命令innobackupex-1.5.1需要指定具體哪個備份目錄,先應用備份log,然后copy back。這里的備份目錄是/data/innobackup/2009-09-01_11-59-29。恢復時間約3分鐘。

值得一提的是,默認innobackupex-1.5.1會將二進制日志信息存放在文件xtrabackup_binlog_info中發(方便做Slave)。

innobackupex-1.5.1會根據/et/my.cnf來確定MySQL的數據位置。

恢復數據到其他機器:

首先將備份的目錄rsync或者scp到目標機器,同步保證目標機器的my.cnf和源機器一樣,然后執行和上面相同的操作,同時還可以使用

 innobackupex-1.5.1的--remote-host參數直接將數據備份到遠程機器上面.

在遠程機器上面恢復數據之后,就可以備份目錄里面xtrabackup_binlog_info 信息來修改master的日志名和position

CHANGE MASTER TO MASTER_LOG_FILE='recorded_log_file_name',   MASTER_LOG_POS=recorded_log_position;

2. 打包(Tar)備份

這里基本和前面的普通備份類似,就不做詳細說明了,之列出對應的命令。值得一提的是,恢復解壓縮時,必須使用-i參數。

innobackupex-1.5.1 --user=root --password=123 --stream=tar /data/backup/ 2>/data/backup/2.log 1>/data/backup/2.tar

大約2分55秒。這里使用1>做標準輸出重定向。

數據恢復:

tar --ixvf 2.tar #解壓壓縮 這里-i參數是必須的。

innobackupex-1.5.1 --apply-log /data/backup/innobackup

innobackupex-1.5.1 --copy-back /data/backup/innobackup

cd /usr/local/mysql/data/

chown -R mysql:mysql *  . #(這時候可能還需要修改datadir修改文件的所有者

mysqld_safe --user=mysql &

3. 壓縮(tar gzip)備份

innobackupex-1.5.1 --user=root --password=123 --stream=tar /u01/backup/1/ 2>/u01/backup/2.log | gzip > /u01/backup/1/1.tar.gz

大約3分鐘。這里使用了管道|將innobackupex-1.5.1作為gzip的標準輸入。它的恢復過程,只需要使用tar --izxvf 解壓對應的文件后,操作完全同普通備份。

四、 關于XtraBackup

XtraBackup還在快速的成長階段,由http://www.percona.com/維護。這里列出一些相關資源:

· 主頁: http://www.percona.com/docs/wiki/percona-xtrabackup:start

· Google Group: http://groups.google.com/group/percona-discussion?hl=en

· Launchpad: https://launchpad.net/percona-xtrabackup

· Manual http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual

· Ningoo.net: 

http://www.ningoo.net/html/2009/using_xtrabackup_backup_mysql_database.html

參考文獻

http://www.percona.com/docs/wiki/percona-xtrabackup:start

http://www.ningoo.net/html/2009/using_xtrabackup_backup_mysql_database.html

http://www.innodb.com/doc/hot_backup/manual.html#innobackup

http://www.ibm.com/developerworks/cn/linux/l-diffp/index.html