MySQL備份恢復--Xtrabackup

這裏寫圖片描述

Percona XtraBackup是一個免費的,開源的,完整的在線備份解決方案,適用於所有版本的Percona Server for MySQL,MySQL和MariaDB。 Percona XtraBackup具有超過2,100,000次的下載量,可以在事務處理系統上執行在線非阻塞,緊密壓縮,高度安全的備份,以便在計劃維護期間應用程序保持完全可用狀態。據官方介紹,這也是世界上惟一一款開源的能夠對innodb和xtradb數據庫進行熱備的工具。其具有以下幾大特點:
(1)備份過程快速、可靠;
(2)備份過程不會打斷正在執行的事務;
(3)能夠基於壓縮等功能節約磁盤空間和流量;
(4)自動實現備份檢驗;
(5)還原速度快;
(6)支持部分備份(MyISAM),支持備份到遠程服務器
(7)實現的是物理複製
下面我們就運用Xtrabackup進行數據庫的備份恢復

一.全量備份

1.下載安裝軟件

軟件現在可以通過官方網站https://www.percona.com進行下載,軟件是可以直接下載的,但用戶手冊需要進行信息註冊後纔可下載
這裏採用的環境爲兩臺CentOS7.3主機
數據庫爲base源Mariadb5.5.56
軟件爲percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm
yum install -y mariadb-server
yum install -y percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm

2.創建專用MySQL賬戶

使用root權限登錄備份缺乏安全性,所以穿件最小權限賬戶進行備份恢復操作
MariaDB> CREATE USER ‘bkpuser’@’localhost’ IDENTIFIED BY ‘123123’; #穿件帳號
MariaDB> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ‘bkpuser’@’localhost’; #先撤銷所有權限
MariaDB> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON . TO ‘bkpuser’@’localhost’; #賦予最小權限
MariaDB> FLUSH PRIVILEGES; #刷新權限

3.開啓二進制日誌文件記錄

vim /etc/my.cnf.d/server.cnf
log-bin=master-log
因爲全量備份過後不能保證數據庫不變動且時間點也不同,所以需要使用二進制日誌重寫來同步

4.生成全量備份文件

innobackupex –user=bkpuser –password=123123 –host=localhost /backup
171112 17:29:02 completed OK!
[root@CentOS7 ~]$cd /backup/
[root@CentOS7 /backup]$ls
2017-11-12_17-28-56 fullbackup-201715:44:54.sql
[root@CentOS7 /backup]$cd 2017-11-12_17-28-56/
[root@CentOS7 /backup/2017-11-12_17-28-56]$ls
xtrabackup_checkpoints
xtrabackup_binlog_info
backup-my.cnf
xtrabackup_logfile
performance_schema
ibdata1
mysql
(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(如是否已經爲prepared狀態)和LSN(日誌序列號)範圍信息;每個InnoDB頁(通常爲16k大小)都會包含一個日誌序列號,即LSN。LSN是整個數據庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的。
(2)xtrabackup_binlog_info —— mysql服務器當前正在使用的二進制日誌文件及至備份這一刻爲止二進制日誌事件的位置。
(3)xtrabackup_binlog_pos_innodb —— 二進制日誌文件及用於InnoDB或XtraDB表的二進制日誌文件的當前position。
(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執行文件;
(5)backup-my.cnf —— 備份命令用到的配置選項信息;
(6)xtrabackup_logfile——包含運行:xtrabackup –prepare所需的數據。 這個文件越大,xtrabackup –prepare過程將花費更長的時間完成。

5.準備備份文件

“準備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態。
innobackupex –apply-log /backup/2017-11-12_17-28-56/
171112 17:33:14 completed OK!
scp /backup/2017-11-12_17-28-56/ [email protected]:/backup/
cat /backup/2017-11-12_17-28-56/xtrabackup_binlog_info
master-log.000001 714
mysqlbinlog -j 714 master-log.000001 > /backup/binlog.sql
scp /backup/binlog.sql [email protected]:/tmp/

6.同步數據

systemctl stop mariadb.service
rm -rf /var/lib/mysql/*
innobackupex –copy-back /backup/2017-11-12_17-28-56
171112 17:37:24 completed OK!
chown -R mysql:mysql /var/lib/mysql/
systemctl start mariadb.service
MariaDB>source /tmp/master-log.000001;

二.準備增量/差異備份

增量備份與差異備份的性質差不多,只是備份時的目標文件區別,第二次生成備份文件如果是以第一次增量文件爲基準,便是增量備份,如果仍然以全量備份爲基準,那便是差異備份
innobackupex –user=bkpuser –password=123123 –host=localhost /mydata/backups/
#生成全量備份
innobackupex –incremental /backup –incremental-basedir=BASEDIR1
innobackupex –incremental /backup –incremental-basedir=BASEDIR2
innobackupex –apply-log –redo-only BASE-DIR
#準備恢復文件
innobackupex –apply-log –redo-only BASE-DIR –incremental-dir=INCREMENTAL-DIR-1
#順序疊加準備
innobackupex –apply-log –redo-only BASE-DIR –incremental-dir=INCREMENTAL-DIR-1
#準備完成後通過查看lsn序列碼確定是否備份完全
cat xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 1597945
last_lsn = 1597945
compact = 0
recover_binlog_info = 0

之後的恢復工作以及二進制重寫於全量備份一致,這裏不再進行贅述

下面提出幾個注意項:

(1)恢復時MySQL服務堅決不能啓動
(2)軟件複製與被複制服務器都要安裝,實現的是物理複製
(3)非最後一次增量備份恢復沒完成事務不要動,最後一次回滾未完成事務

(4)本機宕機恢復之後要做全量備份,舊的全量備份已經進行回滾回滾,不再適用

(5)恢復時合理關閉二進制日誌記錄,可以避免不必要的I/O壓力和磁盤佔用

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