原理:
在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...