軟體版本:
percona-xtrabackup-2.2.10
mysql-5.6.23
- 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。
恢複完成,如下圖