天天看點

xtrabackup使用方法簡介

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

安裝:

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

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

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

當然個人還是推薦yum安裝,先安裝percona的yum源

<a href="http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm" target="_blank">然後 yum install percona-xtrabackup,所有依賴全搞定</a>

<a href="http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm" target="_blank"></a>

備份有全庫備份、部分備份、全量備份、增量備份以及壓縮備份等方式。

全庫備份指備份資料目錄下的所有庫;部分備份指備份指定的庫/表;全量和增量不在贅述。

   備份權限問題:如果以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 --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/全備目錄

附件為2.19版本的官方文檔

<a href="http://down.51cto.com/data/2364515" target="_blank">附件:http://down.51cto.com/data/2364515</a>

     本文轉自kai404 51CTO部落格,原文連結:http://blog.51cto.com/kaifly/1423528,如需轉載請自行聯系原作者