mysql备份工具Xtrabackup增量备份还原图解
? ? ? ? ? ? ? ? ? ? ? ? ? ?Xtrabackup增量備份還原圖解
聲明
本文的數據來自網絡,部分代碼也有所參照,這里做了注釋和延伸,旨在技術交流,如有冒犯之處請聯系博主及時處理。
XtraBackup是Percona?提供的免費、在線、開源、完整的數據庫備份解決方案,適用于所有版本的Percona Server for MySQL和MySQL。Percona XtraBackup在事務系統上執行在線非阻塞、緊致壓縮、高度安全的完整備份。
注: 當前驗證環境CentOS 8 X86 64、mysql 8.0.23、XtraBackup 8.0.23-16
準備
驗證思路
1 對當前數據庫進行全備
2 全備后針對該表的某條記錄的特定字段做更新,然后做第一次差異備份
3 刪除驗證記錄,然后再做第二次差異備份
4 往該表路插入記錄ID相同的其它記錄以作還原時對比
5 還原全備,差異備份1和2,驗證數據是否回到步驟3的狀態(即無驗證記錄)
用戶賦權
-- 創建用戶并備份相關賦權 create user 'mysqlbak'@'localhost' identified by 'root@1234T5'; GRANT SELECT, BACKUP_ADMIN, RELOAD, PROCESS, SUPER, REPLICATION CLIENT ON *.*TO `mysqlbak`@`localhost`; GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO 'mysqlbak'@'localhost'; GRANT CREATE, INSERT, DROP, UPDATE, SELECT, ALTER ON mysql.backup_history TO 'mysqlbak'@'localhost';備份前狀態
-- 查看當前備份前數據情況 CREATE TABLE `test_04251019` (`id` int DEFAULT NULL,`name` varchar(10) DEFAULT NULL,`addr` varchar(12) DEFAULT NULL,`memo` varchar(40) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `test_04251019` VALUES ('1', 'hanmeimie', 'Guangzhou', 'Fullbakup'); INSERT INTO `test_04251019` VALUES ('2', 'lilei', 'Guangzhou', 'in increament'); INSERT INTO `test_04251019` VALUES ('4', 'Tom', 'Shanghai', 'no more'); INSERT INTO `test_04251019` VALUES ('5', 'John', 'Shanghai', 'no more_5'); INSERT INTO `test_04251019` VALUES ('5', 'Jim', 'Shanghai2', 'no more_5_2'); COMMIT; -- 驗證數據 INSERT INTO `test_04251019` VALUES ('7', 'Shen', 'Chongqing', '全備期間'); COMMIT; select * from test_04251019;差異備份
首次全備
Step 1 全量備份當前數據庫
#以mysqlbak用戶將當前數據庫備份到指定目錄下。 xtrabackup --user=mysqlbak --password='root@1234T5' --backup --target-dir=/root/workspace/mysqlbackup/XtraBack_base/第一次差備
Step 2: 修改表數據
--修改ADDR字段后做差異備份 UPDATE test_04251019 SET ADDR = 'Shanghai',memo='第一次差異備' WHERE id = 7; COMMIT;SELECT * FROM test_04251019 WHERE id = 7;Step 3 第一次差異備份
--第一次差異備份 xtrabackup --backup --user=mysqlbak --password='root@1234T5' --target-dir=/root/workspace/mysqlbackup/XtraBack_incr_1/ --incremental-basedir=/root/workspace/mysqlbackup/XtraBack_base/Step 4 刪除驗證記錄
-- 刪除記錄ID是7的驗證記錄 DELETE FROM test_04251019 WHERE id = 7; COMMIT; SELECT * FROM test_04251019 WHERE id = 7;第二次差備
Step 5 第二次差異備份
--第二次差備 xtrabackup --backup --user=mysqlbak --password='root@1234T5' --target-dir=/root/workspace/mysqlbackup/XtraBack_incr_2/ --incremental-basedir=/root/workspace/mysqlbackup/XtraBack_incr_1/Step 6 重新插入數據,但數據內容不一樣。
--當前數據庫最新數據狀態 INSERT INTO `test_04251019` VALUES ('7', 'ShenLiang', 'Beijing', '第二次差異備份后'); COMMIT; SELECT * FROM test_04251019 WHERE id = 7;還原
還原前
#Step 1 :關閉數據庫 mysqladmin -uroot -p'root1234' shutdown#Step 2 :備份數據文件 mv /data/mysql /data/mysql_0429_V2還原中
關于xtrabackup還原部分這里有兩種方法,具體解釋見下:
1 建議用第二種方法(way 2),通過apply-log-only的方式還原直至到還原點。
2 當前驗證way 1和way2效果一樣。 ?
#Way 1: # 準備全備 xtrabackup --prepare --apply-log-only --target-dir=/root/workspace/mysqlbackup/XtraBack_base/# APPLY 增量1 xtrabackup --prepare --apply-log-only --target-dir=/root/workspace/mysqlbackup/XtraBack_base/ --incremental-dir=mysqlbackup/XtraBack_incr_1/# 準備還原 xtrabackup --prepare --target-dir=/root/workspace/mysqlbackup/XtraBack_base/ --incremental-dir=mysqlbackup/XtraBack_incr_2# 拷貝還原 xtrabackup --copy-back --target-dir=/root/workspace/mysqlbackup/XtraBack_base/ #Way 2: #Step 1 :預恢復數據庫 xtrabackup --prepare --apply-log-only --target-dir=/root/workspace/mysqlbackup/XtraBack_base/#Step 2: Apply第一次增量 xtrabackup --prepare --target-dir=/root/workspace/mysqlbackup/XtraBack_base/ --incremental-dir=/root/workspace/mysqlbackup/XtraBack_incr_1/#Step 3: 再次Apply全備(已含增量1信息) xtrabackup --prepare --apply-log-only --target-dir=/root/workspace/mysqlbackup/XtraBack_base/#Step 3: 準備還原增量2 xtrabackup --prepare --target-dir=/root/workspace/mysqlbackup/XtraBack_base/ --incremental-dir=/root/workspace/mysqlbackup/XtraBack_incr_2/?Step 5 : 創建數據目錄或者使其為空
#創建數據目錄 mkdir?-p?/data/mysql?Step 6 :還原數據庫
#還原數據文件 xtrabackup --copy-back --target-dir=/root/workspace/mysqlbackup/XtraBack_base/注:這里數據目錄/data/mysql需事先為空。
Step 7 賦權數據文件mysql用戶能訪問。
#數據目錄給予mysql用戶權限 chown -R mysql:mysql /data/mysql #注:如果這里不賦權,后續mysq數據庫重啟時會報錯。還原后
#Step 1 重啟mysql數據庫服務 service mysqld start #Step 2 還原前后對比 還原前 還原后由此可見數據庫已經還原到第二次增量備份時的狀態(即驗證數據被刪除)。
問題
第二次差異備份還原時提示Apply-log-only
Issue 1:在第二次差異備份還原的prepare環節,直接執行prepare命令時報已經 prepared,需要加上apply-log-only參數。
解決方法:因為有多次差異備份,所以在每次prepare差異時都要先--apply-log-only全量的備份。即再次執行
# 先對apply-log后的全備prepare xtrabackup --prepare --apply-log-only --target-dir=/root/workspace/mysqlbackup/XtraBack_base/#再最終執行preparextrabackup --prepare --target-dir=/root/workspace/mysqlbackup/XtraBack_base/ --incremental-dir=/root/workspace/mysqlbackup/XtraBack_incr_2/注:如果使用還原時的Way1方案,則沒有該報錯提示。
總結
以上是生活随笔為你收集整理的mysql备份工具Xtrabackup增量备份还原图解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 备份工具xtrabackup
- 下一篇: 中国银行中银E贷审核未通过原因