xtrabackup使用方法簡介

關於xtrabackup的簡介就不再贅述,百度一堆,使用方法也說明也很多。感覺還是隻有自己試過之後纔能有更深刻的認識,以下的使用說明基於官方文檔及自己試驗過程,記錄下備查。

安裝

去percona-xtrabackup官網上下載,有rpm包、tar包,也有解壓直接可用的二進制包。我試驗採用的二進制包。

由於裏面的innobackupx命令實際上是用perl語言封裝了xtrabackupx而成,所以使用innobackupx命令要先檢查perl包以及其依賴包的安裝情況。

可以執行yum install prel perl-DBD perl-Time-HiRes 解決關於perl的報錯。

當然個人還是推薦yum安裝,先安裝percona的yum源
yum install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

然後 yum install percona-xtrabackup,所有依賴全搞定

備份有全庫備份部分備份全量備份增量備份以及壓縮備份等方式。
全庫備份指備份數據目錄下的所有庫;部分備份指備份指定的庫/表;全量和增量不在贅述。

備份權限

如果以root之外的用戶執行備份,備份用戶需要有以下權限:

RELOAD and LOCK TABLES (unless the –no-lock option is specified) in order to FLUSH TABLES WITH READ LOCK prior to start copying the files and
REPLICATION CLIENT in order to obtain the binary log position,
CREATE TABLESPACE in order to import tables (see Restoring Individual Tables) and
SUPER in order to start/stop the slave threads in a replication environment.

my.cnf文件裏面必須指定datadir=xxx,innobackupx在備份和恢復階段從這裏獲知數據目錄的路徑。

全庫全量備份

innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR

並注意觀察輸出的最後一行,有“complete ok”纔算成功。程序會在備份目錄下創建一個以當前時間戳爲名的目錄存儲備份的文件。

如果MySQL配置文件不在默認目錄(/etc,/datadir/)下,需要通過以下方式告知程序my.cnf的路徑

innobackupex --defaults-file=/tmp/other-my.cnf --user=DBUSER --password=DBUSERPASS /path/to/BACKUP

並且–defaults-file必須作爲第一個選項

恢復分爲兩個步驟:準備階段—-恢復階段

innobackupx備份完之後的數據時不能直接恢復使用的,因爲拷貝數據文件的同時,還會有事務提交或回滾,xtrabackup通過一個額外的線程記錄拷貝過程中binlog日誌中的變化,並在“準備”階段通過將日誌中的改變應用到備份文件中來保證備份文件的數據一致性。

準備階段

執行innobackupex --apply-log /path/to/BACKUP-DIR

另外可以通過使用--use-memory=xx 選項來加速此過程,例如

innobackupex --apply-log --use-memory=4G /path/to/BACKUP-DIR

此過程執行完,看到最後提示“complete ok”說明已經將日誌中記錄的的改變應用到備份文件中。

恢復階段

關閉mysql,清空datadir(注意:mysql的datadir在恢復過程中必須確保是空的,否則執行不成功),

innobackupex --copy-back /path/to/BACKUP-DIR

(從my.cnf獲得datadir之後,將最終可用的數據拷貝至datadir)

提示“complete ok”之後,就可以啓動數據庫了。注意:在啓動數據庫前要注意修改數據目錄權限,以確保mysql對於數據的讀寫權限。

  • 特定庫/表備份
    對於特定庫/表的備份,官方文檔給出了三種方法

    –include=’正則表達式’ 例如 –include=’^ljk’只備份ljk庫,在備份目錄裏還會有其他庫的目錄,但都是空的

    –tables-file=文件 該文件中應該包含database.table形式的內容,每行一個表,注意:ljk.*是不生效的。

    –databases=’庫名[.表名]’ 多個庫中間以空格隔開,此選項還不完善,官方文檔也說明了:此選項只對.frm文件和非innodb表有效,對於InnoDB表即使指定了數據庫,仍然會備份所有的庫。

恢復過程
執行innobackupex --apply-log /path/to/partial/backup

成功後關閉數據庫,將制定庫/表的備份文件cp至數據目錄下即可,記得修改權限。

增量備份

思路:先做全量備份,之後按照下面命令執行增備

innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR

innobackupex --user=DBUSER --password=DBUSERPASS --incremental /data/backups --incremental-basedir=BASEDIR

恢復過程

思路:將各個增量備份的數據文件合併到最初的全量備份的目錄下,最終是從全量備份這個目錄下恢復數據。假如現在有一個全量三個增量的備份

innobackupex --apply-log --redo-only BASE-DIR/全備目錄 注意;此處增加了–redo-only

innobackupex --apply-log --redo-only BASE-DIR/全備目錄 --incremental-dir=INCREMENTAL-DIR-1(第一個增量的目錄)

innobackupex --apply-log --redo-only BASE-DIR/全備目錄 --incremental-dir=INCREMENTAL-DIR-2(第二個增量的目錄)

innobackupex --apply-log BASE-DIR/全備目錄 --incremental-dir=INCREMENTAL-DIR-3(注:最後一個增量目錄不需要加–redo-only選項)

注:“準備”程中,增量備份的路徑需要些絕對路徑,試驗時寫相對路徑不成功

如果以上都執行成功,則可以繼續下一步

innobackupex --apply-log BASE-DIR/全備目錄 將記錄在日誌裏的改變應用的數據中,確保數據一致性。

然後可以向全量備份一樣執行恢復了

innobackupex --copy-back BASE-DIR/全備目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章