日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql备份工具Xtrabackup增量备份还原图解

發布時間:2024/9/27 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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增量备份还原图解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。