天天看點

percona-xtrabackup   備份

軟體版本:

percona-xtrabackup-2.2.10

mysql-5.6.23

  1. xtrabackup安裝

2.全備及恢複

(1)全備

檢視資料庫

[root@local-dbopt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /bak/mysql/

該語句将拷貝資料檔案(由my.cnf裡的變量datadir指定)至備份目錄下(/bak/mysql/),注意:如果不指定--defaults-file,預設值為/etc/my.cnf。

備份成功後,将在備份目錄下建立一個時間戳目錄(本例建立的目錄為/bak/mysql/2015-07-08_18-52-43),在該目錄下存放備份檔案。

(2)恢複

删除資料庫test123,嘗試恢複

恢複之前,要先關閉資料庫,并且删除資料檔案和日志檔案。

[root@local-dbopt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456--apply-log /bak/mysql/2015-07-08_18-52-43/

[root@local-dbopt]# innobackupex --defaults-file=/etc/my.cnf --user=root--password=123456  --copy-back/bak/mysql/2015-07-08_18-52-43/

恢複分為兩個步驟:

第1步是apply-log,為了加快速度,一般建議設定--use-memory,這個步驟完成之後,目錄/bak/mysql/2015-07-08_18-52-43/下的備份檔案已經準備就緒。

第2步是copy-back,即把備份檔案拷貝至原資料目錄下。恢複完成之後,一定要記得檢查資料目錄的所有者和權限是否正确。

3.增量備份及恢複

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

(1)增量備份

增量備份需要基于全備,我們已經有了一個全備(/bak/mysql/2015-07-08_18-52-43/),我們需要在該全備的基礎上做增量備份。

測試建立庫,導入新資料,做增量備份。

[root@local-dbmysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456--incremental-basedir=/bak/mysql/2015-07-08_18-52-43/ --incremental /bak/mysql/

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

上面語句執行成功之後,會在--incremental執行的目錄下建立一個時間戳子目錄(本例中為:/bak/mysql/2015-07-08_19-46-30),在該目錄下存放着增量備份的所有檔案。

在備份目錄下,有一個檔案xtrabackup_checkpoints記錄着備份資訊,全備的資訊如下:

基于該全備的增量備份的資訊如下:

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

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

[root@local-dbmysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456--incremental-basedir=/bak/mysql/2015-07-08_19-46-30/ --incremental /bak/mysql/

它的xtrabackup_checkpoints記錄着備份資訊如下:

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

删除資料庫test456,嘗試恢複

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

[root@local-dbmysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456  --apply-log --redo-only/bak/mysql/2015-07-08_18-52-43/

[root@local-dbmysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456  --apply-log --redo-only/bak/mysql/2015-07-08_18-52-43/ --incremental-dir=/bak/mysql/2015-07-08_19-46-30/

[root@local-dbmysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456  --apply-log --redo-only/bak/mysql/2015-07-08_18-52-43/ --incremental-dir=/bak/mysql/2015-07-08_21-01-19/

其中/bak/mysql/2015-07-08_18-52-43/是指全備目錄,/bak/mysql/2015-07-08_19-46-30/是指第一次的增量備份,/bak/mysql/2015-07-08_21-01-19/是指第二次的增量備份,以此類推。

以上語句執行成功之後,最終資料在全備目錄下。

第一步完成之後,我們開始第二步:復原未完成的日志:

[root@local-dbmysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456  --apply-log /bak/mysql/2015-07-08_18-52-43/

上面執行完之後,/bak/mysql/2015-07-08_18-52-43/裡的備份檔案已完全準備就緒,最後一步是拷貝:

[root@local-dbmysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456 --copy-back/bak/mysql/2015-07-08_18-52-43/

修改目錄權限,啟動mysql。

恢複完成,如下圖