#1、安裝 ###1.下載源碼: wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.5/source/percona-xtrabackup-2.1.5.tar.gz ###2.安裝依賴包: yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel ###3.解壓源碼包: tar -zxvf percona-xtrabackup-2.1.5.tar.gz cd percona-xtrabackup-2.1.5 ###4.編譯安裝 目錄中的./utils/build.sh腳本會根據指定的引擎版本,自動解壓縮適當的MySQL源碼包並進行編譯,這是最簡單的安裝方式。 直接執行:mysql
./utils/build.sh
出現以下提示:c++
[root@test1 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.28,因此執行以下語句安裝sql
./utils/build.sh innodb56
以上語句執行成功後,表示安裝完成。最後,把生成的二進制文件拷貝到一個自定義目錄下(本例中爲/var/lib/mysql/percona-xtrabackup-2.1.5),並把該目錄放到環境變量PATH中。vim
cp ./innobackupex /var/lib/mysql/percona-xtrabackup-2.1.5 cp ./src/xtrabackup_56 ./src/xbstream /var/lib/mysql/percona-xtrabackup-2.1.5 vim /root/.bashrc (末行加入export PATH=$PATH:/var/lib/percona-xtrabackup-2.1.5/bin/) source /root/.bashrc
#2、全備及其恢復 ###1.全備: 執行以下語句進行全備bash
innobackupex --defaults-file=/etc/my.cnf --user=admin --password=admin /backup/mysql/data
該語句將拷貝數據文件(由my.cnf裏的變量datadir指定)至備份目錄下(/backup/mysql/data),若不指定--defaults-file,默認值爲/etc/my.cnf。 備份成功後,將在備份目錄下建立一個時間戳目錄(本例建立的目錄爲/backup/mysql/data/2016-03-24_01-14-19),在該目錄下存放備份文件。 ###2.恢復:app
innobackupex --user=root --password=123456 --apply-log /backup/mysql/data/2016-03-24_01-14-19 innobackupex --user=root --password=123456 --copy-back /backup/mysql/data/2016-03-24_01-14-19
從上面能夠看出,恢復分爲兩個步驟,第1步是apply-log,爲了加快速度,通常建議設置--use-memory(因爲本虛擬機的屌絲配置,因此沒有大內存分配給這個命令專用,全部沒有加上這個選項),這個步驟完成以後,目錄/backup/mysql/data/2016-03-24_00-43-24下的備份文件已經準備就緒。
第2步是copy-back,即把備份文件拷貝至原數據目錄下。 恢復完成以後,必定要記得!!檢查數據目錄的全部者和權限!!是否正確。性能
#3、增量備份及其恢復
注意:innobackupex 增量備份僅針對InnoDB這類支持事務的引擎,對於MyISAM等引擎,則仍然是全備。ui
###1.增量備份 增量備份須要基於全備,先假設咱們已經有了一個全備(/backup/mysql/data/2016-03-24_01-14-19),在該全表的基礎上作增量備份。.net
innobackupex --user=root --password=123456 --incremental-basedir=/backup/mysql/data/2016-03-24_01-14-19 --incremental /backup/mysql/data
其中--incremental-basedir指向全備目錄,--incremental指向增量備份的目錄。
上面語句執行成功以後,會在--incremental執行的目錄下建立一個時間戳子目錄(本例中爲:/backup/mysql/data/2016-03-24_02-30-35),在該目錄下存放着增量備份的全部文件。
在備份目錄下,有一個文件xtrabackup_checkpoints記錄着備份信息,全備的信息以下:日誌
[root@test1 2016-03-24_01-14-19]# more xtrabackup_checkpoints backup_type = full-prepared from_lsn = 0 to_lsn = 1665331 last_lsn = 1665331 compact = 0
基於該全備的增量備份的信息以下:
[root@test1 2016-03-24_02-30-35]# more xtrabackup_checkpoints backup_type = incremental from_lsn = 1665331 to_lsn = 1673129 last_lsn = 1673129 compact = 0
從上面能夠看出,增量備份的from_lsn正好等於全備的to_lsn。
咱們還能夠在增量備份的基礎上再作增量備份,只要把--incremental-basedir執行上一次增量備份的目錄便可,以下所示:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/backup/mysql/data/2016-03-24_02-30-35 --incremental /backup/mysql/data
它的xtrabackup_checkpoints記錄着備份信息以下:
[root@test1 2016-03-24_02-34-28]# more xtrabackup_checkpoints backup_type = incremental from_lsn = 1673129 to_lsn = 1673129 last_lsn = 1673129 compact = 0
能夠看到,該增量備份的from_lsn是從上一次增量備份的to_lsn開始的。
###2.恢復: 增量備份的恢復比全備要複雜不少,第一步是在全部備份目錄下重作已提交的日誌,如:
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
一樣地,拷貝結束以後,記得檢查下數據目錄的權限是否正確。
#4、常見錯誤及解決方法 ###錯誤1: 出現"Can't locate Time/HiRes.pm in @INC"錯誤提示沒法進行,檢測是出現缺乏perl Time HiRes組件形成的 解決方法:
yum -y install perl-Time-HiRes
###錯誤2:
innobackupex: Error: Original data directory '/var/lib/mysql' is not empty! at /var/lib/percona-xtrabackup-2.1.5/bin/innobackupex line 2098.報錯
解決方法:
清空/var/lib/mysql/這個目錄
參考文章:http://blog.csdn.net/heizistudio/article/details/23937935