初識MariaDB之4——Xtrabackup備份與還原

一、基礎知識

mysqldump是mysql自帶的一個單線程的邏輯備份工具,當數據量很大時,使用mysqldump備份的時間會非常長,且無法做增量備份,xtrabackup是一款基於底層塊複製、開源的備份工具,可以對數據庫在線實現備份。xtrabackup支持對Innodb和Xtradb存儲引擎的完全、增量和差異備份,對於不支持事物的MyISAM存儲引擎只能完全備份。

二、備份工具

1.png

Xtrabackup工具用到的命令爲xtrabackup和innobackupex,而innobackupex又是將xtrabackup使用perl腳本語言封裝的二次版本,其目的時爲了便於使用

2.png

本文重點介紹innobackupex爲例,介紹完全備份、增量備份和差異備份

三、實驗說明

本次實驗採用CentOS7.4系統,數據庫版本爲MariaDB 5.5.56,innobackupex 版本爲2.3.6。

1.完全備份

(1)創建備份賬戶

MariaDB [hellodb]> grant all privileges on *.* to 'backup'@'localhost' identified by 'backuppassword';

MariaDB [hellodb]> flush privileges;

(2)創建備份目錄

[root@node1 ~]# mkdir -pv /data/back

[root@node1 ~]# chown -R mysql.mysql /data/back

(3)執行備份

innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword  /data/back

看到completed OK!提示後表示備份成功,上述命令還可以使用--databases="db1 db2"來備份制定的庫,或者使用--no-timestamp不自動生成時間戳

3.png

(4)關閉數據庫服務,刪除數據,模擬數據庫損壞

[root@node1 back]# systemctl stop mariadb.service

(5)恢復前準備(將已提交的事物同步到磁盤,未提交的事務回滾)

innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword  --apply-log /data/back/2018-04-24_07-38-47/

(6)恢復數據(如果用root賬號操作,需要更改恢復後數據目錄的屬組和屬主)

innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword  --copy-back /data/back/2018-04-24_07-38-47/

(7)重啓數據庫服務,至此操作完成

2.增量備份

增量備份的實現是根據每一個Innodb頁都有一個log sequence number(LSN),當數據發生變化時,其所在的Innodb頁的LSN會自動增長,增量備份就是根據LSN的範圍序列實現備份,每次備份的LSN號可以在xtrabackup_checkpoints中查看。其備份的方式與全備略有不同,增量備份需要給予一個全被或者上一次增量來進行,具體步驟如下:

(1)創建一個完全備份

[root@node1 ~]# innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword  /data/back

(2)基於已創建的完全備份,做增量備份

[root@node1 ~]# innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword --incremental /data/incremental/ --incremental-basedir=/data/back/2018-04-25_06-32-18/

(3)基於已第一次創建的增量備份,做第二次增量備份(將--incremental-basedir指向完備份,則做的是差異備份)

[root@node1 ~]# innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backuppassword --incremental /data/incremental/ --incremental-basedir=/data/incremental/2018-04-25_06-34-15/

(4)刪除數據庫文件,模擬故障(提前保存二進制文件,備份到故障發生點之間的還原還需要通過二進制文件)

[root@node1 ~]# cat /data/incremental/2018-04-25_06-39-57/xtrabackup_binlog_info

[root@node1 ~]# mysqlbinlog --start-position=1721 mysql-binlog.000002 > /data/incremental/binlog.sql

[root@node1 ~]# systemctl stop mariadb.service

[root@node1 ~]# rm -rf /var/lib/mysql*

(5)恢復前準備(出除最後一個增量外其他都需要使用--redo-only選項,其作用是不進行回滾操作,因爲增量1中未提交的事務在增量2中可能會提交,所以不回滾。最後1個增量也可以用--redo-only選項,就算他不回滾,根據mariadb的crash-recover機制,啓動時也會回滾未提交事務)

[root@node1 ~]# innobackupex --apply-log --redo-only /data/back/2018-04-25_06-32-18/

[root@node1 ~]# innobackupex --apply-log --redo-only /data/back/2018-04-25_06-32-18/ --incremental-dir=/data/incremental/2018-04-25_06-34-15/

[root@node1 ~]# innobackupex --apply-log --redo-only /data/back/2018-04-25_06-32-18/ --incremental-dir=/data/incremental/2018-04-25_06-39-57/

[root@node1 ~]# chown -R mysql.mysql /var/lib/mysql

(6)恢復數據庫

[root@node1 ~]# innobackupex --copy-back  /data/back/2018-04-25_06-32-18/

[root@node1 ~]# mysql < /data/incremental/binlog.sql

補充說明:

1.xtrabackup是通過讀取LSN從而指導數據的更改的每一個innodb page頁的大小默認是16K,實際測試中發現,如果數據量變化很小,即使binlog中的position發生了變了,使用增量備份的時候LSN號不會發生變化,但是恢復後的數據是一致的

4.png

2.在恢復增量備份的準備階段時--incremental-dir選項後面不能使用相對路徑,否則會提示找不到要恢復增量備份的xtrabackup_logfile


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