innobackupex在線備份及恢復

#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

相關文章
相關標籤/搜索