您好,登錄后才能下訂單哦!
一、基礎知識
mysqldump是mysql自帶的一個單線程的邏輯備份工具,當數據量很大時,使用mysqldump備份的時間會非常長,且無法做增量備份,xtrabackup是一款基于底層塊復制、開源的備份工具,可以對數據庫在線實現備份。xtrabackup支持對Innodb和Xtradb存儲引擎的完全、增量和差異備份,對于不支持事物的MyISAM存儲引擎只能完全備份。
二、備份工具
Xtrabackup工具用到的命令為xtrabackup和innobackupex,而innobackupex又是將xtrabackup使用perl腳本語言封裝的二次版本,其目的時為了便于使用
本文重點介紹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不自動生成時間戳
(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號不會發生變化,但是恢復后的數據是一致的
2.在恢復增量備份的準備階段時--incremental-dir選項后面不能使用相對路徑,否則會提示找不到要恢復增量備份的xtrabackup_logfile
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。