xtrabackup全備、增備、恢復

ew3y 9年前發布 | 15K 次閱讀 MySQL 數據庫服務器 XtraBackup

全備:

innobackupex --no-timestamp --defaults-file=/path/my.cnf    /data/backup/20141106

增量1:
innobackupex --no-timestamp --defaults-file=/path/my.cnf --incremental --incremental-basedir=/data/backup/20141106  /data/backup/20141106-incr

增量2:
innobackupex --no-timestamp --defaults-file=/path/my.cnf --incremental --incremental-basedir=/data/backup/20141106-incr/   /data/backup/20141107-incr

。。。



恢復步驟:

1:innobackupex --defaults-file=/path/backup-my.cnf  --apply-log --redo-only /data/backup/20141106/

2:innobackupex --defaults-file=/path/backup-my.cnf --apply-log --redo-only /data/backup/20141106/ --incremental-dir=/data/backup/20141106-incr/

3:innobackupex --defaults-file=/path/backup-my.cnf --apply-log --redo-only /data/backup/20141106/ --incremental-dir=/data/backup/20141107-incr/

。。。

4: innobackupex --defaults-file=/path/my.cnf --apply-log  /data/backup/20141105/

5.關閉mysql

6.刪除mysql data目錄下的所有文件(最好不要這么干,萬一恢復失敗捏,就歇菜啦。我一般都是 mv data data_bak)

7.innobackupex --defaults-file=/path/my.cnf --copy-back /data/backup/20141105/

8.修改data(首先需要進入data目錄)目錄權限 chown -R mysql:mysql *

8.啟動mysql.到處數據就完美的恢復啦。


注意多實例的情況是需要重新把多實例的配置文件拆分成單個。然后--defaults-file這個命令指向單個配置文件。


完整備份的原理:

對于InnoDB,XtraBackup基于InnoDB的crash-recovery功能進行備份。

crash-recovery是這樣的:InnoDB維護了一個redo log,又稱為 transaction log,也叫事務日志,它包含了InnoDB數據的所有改動情況。InnoDB啟動的時候先去檢查datafile和transaction log,然后應用所有已提交的事務并回滾所有未提交的事務。

XtraBackup在備份的時候并不鎖定表,而是一頁一頁地復制InnoDB的數據,與此同時,XtraBackup 還有另外一個線程監視著transactions log,一旦log發生變化,就把變化過的log pages復制走(因為transactions log文件大小有限,寫滿之后,就會從頭再開始寫,新數據可能會覆蓋到舊的數據,所以一旦變化就要立刻復制走)。在全部數據文件復制完成之后,停止復制 logfile。

XtraBackup采用了其內置的InnoDB庫以read-write模式打開InnoDB的數據文件,然后每次讀寫1MB(1MB/16KB=64page)的數據,一頁一頁地遍歷,同時用InnoDB的buf_page_is_corrupted()函數檢查此頁的數據是否正常,如果正常則進行復制,如不正常則重新讀取,最多重讀10次,如果還是失敗,則備份失敗退出。復制transactions log的原理也是一樣的,只不過每次讀寫512KB(512KB/16KB=32page)的數據。

由于XtraBackup其內置的InnoDB庫打開文件的時候是rw的,所以運行XtraBackup的用戶,必須對InnoDB的數據文件具有讀寫權限。

由于XtraBackup要從文件系統中復制大量的數據,所以它盡可能地使用posix_fadvise(),來告訴 OS不要緩存讀取到的數據(因為這些數據不會重用到了),從而提升性能。如果要緩存的話,大量的數據會對OS的虛擬內存造成很大的壓力,其它進程(如 mysqld)很有可能會被swap出去,這樣就出問題了。同時,XtraBackup在讀取數據的時候還盡可能地預讀。

由于不鎖表,所以復制出來的數據是不一致的,數據的一致性是在恢復的時候使用crash-recovery進行實現的。

對于MyISAM,XtraBackup還是首先鎖定所有的表,然后復制所有文件。


增量備份的原理:

在完整備份和增量備份文件中都有一個文件xtrabackup_checkpoints會記錄備份完成時檢查點的LSN。在進行新的增量備份時,XtraBackup會比較表空間中每頁的LSN是否大于上次備份完成的LSN,如果是,則備份該頁,并記錄當前檢查點的LSN。

 本文由用戶 ew3y 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!