xtrabackup使用詳解

2021-09-21 00:03:09 字數 4443 閱讀 5569

原理:

在innodb內部會維護乙個redo日誌檔案,我們也可以叫做事務日誌檔案。事務日誌會儲存每乙個innodb表資料的記錄修改。當innodb啟動時,innodb會檢查資料檔案和事務日誌,並執行兩個步驟:它應用(前滾)已經提交的事務日誌到資料檔案,並將修改過但沒有提交的資料進行回滾操作。

xtrabackup在啟動時會記住log sequence number(lsn),並且複製所有的資料檔案。複製過程需要一些時間,所以這期間如果資料檔案有改動,那麼將會使資料庫處於乙個不同的時間點。這時,xtrabackup會執行乙個後台程序,用於監視事務日誌,並從事務日誌複製最新的修改。xtrabackup必須持續的做這個操作,是因為事務日誌是會輪轉重複的寫入,並且事務日誌可以被重用。所以xtrabackup自啟動開始,就不停的將事務日誌中每個資料檔案的修改都記錄下來。上面就是xtrabackup的備份過程。

接下來是準備(prepare)過程。

在這個過程中,xtrabackup使用之前複製的事務日誌,對各個資料檔案執行災難恢復(就像mysql剛啟動時要做的一樣)。當這個過程結束後,資料庫就可以做恢復還原了。

過程是備份---->準備。就是說:先將檔案全部複製過來,再根據事務日誌對部分操作進行回滾。

以上的過程在xtrabackup的編譯二進位制程式中實現。程式innobackupex可以允許我們備份myisam表和frm檔案從而增加了便捷和功能。

innobackupex會啟動xtrabackup,直到xtrabackup複製資料檔案後,然後執行flush tables with read lock來阻止新的寫入進來並把myisam表資料刷到硬碟上,之後複製myisam資料檔案,最後釋放鎖。

備份myisam和innodb表最終會處於一致,在準備(prepare)過程結束後,innodb表資料已經前滾到整個備份結束的點,而不是回滾到xtrabackup剛開始時的點。這個時間點與執行flush tables with read lock的時間點相同,所以myisam表資料與innodb表資料是同步的。

類似oracle的,innodb的prepare過程可以稱為recover(恢復),myisam的資料複製過程可以稱為restore(還原)。

xtrabackup的安裝:

# yum install libev -y

# rpm -ivh percona-xtrabackup-24-2.4.3-1.el6.x86_64.rpm

rpm包釋放的可執行檔案如下:

/usr/bin/innobackupex    # 封裝過的perl指令碼

/usr/bin/xbcloud

/usr/bin/xbcloud_osenv

/usr/bin/xbcrypt

/usr/bin/xbstream

/usr/bin/xtrabackup      # 主程式

xtrabackup的使用:

1、完全備份

# innobackupex --user=dbuser --password=secret /path/to/backup/dir/

生成的是乙個以當前日期命名的資料夾。

如果要使用乙個最小許可權的使用者進行備份,則可基於如下命令建立此類使用者:

> grant process, reload, lock tables, replication client on *.* to 'bkpuser'@'localhost' identified by '123456';

> flush privileges;

使用innobakupex備份時,其會呼叫xtrabackup備份所有的innodb表,複製所有關於表結構定義的相關檔案(.frm)、以及myisam、merge、csv和archive表的相關檔案,同時還會備份觸發器和資料庫配置資訊相關的檔案。這些檔案會被儲存至乙個以時間命名的目錄中。

在備份的同時,innobackupex還會在備份目錄中建立如下檔案:

每個innodb頁(通常為16k大小)都會包含乙個日誌序列號,即lsn。lsn是整個資料庫系統的系統版本號,每個頁面相關的lsn能夠表明此頁面最近是如何發生改變的。

在使用innobackupex進行備份時,還可以使用--no-timestamp選項來阻止命令自動建立乙個以時間命名的目錄;如此一來,innobackupex命令將會建立乙個backup-dir目錄來儲存備份資料。

完全備份\恢復示例:

備份

:在node1上執行:

恢復

在node2上執行恢復:

2、增量備份

每個innodb的頁面都會包含乙個lsn資訊,每當相關的資料發生改變,相關的頁面的lsn就會自動增長。這正是innodb表可以進行增量備份的基礎,即innobackupex通過備份上次完全備份之後發生改變的頁面來實現。

要實現第一次增量備份,可以使用下面的命令進行:

# innobackupex --user=root --password=***x --incremental /backup --incremental-basedir=basedir

其中,basedir指的是完全備份所在的目錄,此命令執行結束後,innobackupex命令會在/backup目錄中建立乙個新的以時間命名的目錄以存放所有的增量備份資料。另外,在執行過增量備份之後再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。

注意: 增量備份僅能應用於innodb或xtradb表,對於myisam表而言,執行增量備份時其實進行的是完全備份。

「準備」(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:

(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行「重放」。「重放」之後,所有的備份資料將合併到完全備份上。

(2)基於所有的備份將未提交的事務進行「回滾」。

於是,操作就變成了:

接著執行:

而後是第二個增量:

其中base-dir指的是完全備份所在的目錄,而incremental-dir-1指的是第一次增量備份的目錄,incremental-dir-2指的是第二次增量備份的目錄,其它依次類推,即如果有多次增量備份,每一次都要執行如上的操作;

增量備份、恢復示例:

1、先做乙個完全備份

# innobackupex --user=root /backups/  會在/backups/下生成乙個以當前時間命名的資料夾。如下圖:

2、對資料表執行些修改等操作

【資料表的修改操作略過】

3、執行增量備份

# innobackupex --incremental /backups/ --incremental-basedir=/backups/2015-11-08_19-24-05

說明:

12

3

4

5

6

補充個指令碼的方式執行全備份、增量備份:

全備份:

innobackupex --user=root --password=123456/backups/

增量備份:

innobackupex --user=root --password=123456 --incremental/backups/--incremental-basedir=/backups/$(ls-l/backups|awk''|tail-1)

# 將上面的2個新增到cron計畫任務即可,備份的路徑是/backups/目錄下。

4、合併備份檔案

5、執行恢復資料到資料庫的操作

# innobackupex --user=root --password=123456 --copy-back /backups/2015-11-08_19-57-53/【注意這裡填的應該是basedir的路徑】

# chown -r mysql.mysql /data/mysql/  修改檔案許可權 

6、啟動mysql檢視是否資料已恢復

# /etc/init.d/mysqld start

Xtrabackup簡單使用

1.1 xtrabackup概念 xtrabackup有兩個主要的工具 xtrabackup innobackupex,其中xtrabackup只能備份innodb和xtradb兩種資料表,innobackupex則封裝了xtrabackup,同時可以備份myisam資料表。xtrabackup做備...

xtrabackup的介紹和使用

xtrabackup是第三方的mysql熱備工具 這裡能找到你想要的xtrabackup版本 安裝xtrabackup tar zxvf p ercona xtrabackup 2.0.1 446.tar.gz cd percona xtrabackup 2.0.1 value alias serv...

Xtrabackup 資料備份工具使用方法

xtrabackup pxb 工具是 percona 公司用 perl 語言開發的乙個用於 mysql 資料庫物理熱備的備份工具,支援 mysql oracle percona server 和 mariadb,並且全部開源。percona xtrabackup的工作原理是在啟動時記住日誌序列號 l...