1.xtrabackup安裝mysql
2.全備及恢復sql
(1)全備數據庫
查看數據庫app
[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /bak/mysql/ide
該語句將拷貝數據文件(由my.cnf裏的變量datadir指定)至備份目錄下(/bak/mysql/),注意:若是不指定--defaults-file,默認值爲/etc/my.cnf。測試
備份成功後,將在備份目錄下建立一個時間戳目錄(本例建立的目錄爲/bak/mysql/2015-07-08_18-52-43),在該目錄下存放備份文件。spa
(2)恢復日誌
刪除數據庫test123,嘗試恢復blog
恢復以前,要先關閉數據庫,而且刪除數據文件和日誌文件。事務
[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log /bak/mysql/2015-07-08_18-52-43/
[root@local-db opt]# 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-db mysql]# 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-db mysql]# 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開始的。
(2)恢復
刪除數據庫test456,嘗試恢復
恢復以前,要先關閉數據庫,而且刪除數據文件和日誌文件。
增量備份的恢復比全備要複雜不少,第一步是在全部備份目錄下重作已提交的日誌,如:
[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /bak/mysql/2015-07-08_18-52-43/
[root@local-db mysql]# 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-db mysql]# 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-db mysql]# 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-db mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /bak/mysql/2015-07-08_18-52-43/
修改目錄權限,啓動mysql。
修改目錄權限,啓動mysql。
恢復完成,以下圖