目錄
1. 前言
2.準備工作
2.1.環境信息
2.2.創建備份目錄
2.3.配置/etc/my.cnf文件
2.4.授予root用戶BACKUP_ADMIN權限
3.全量備份
4.準備備份?
5.數據恢復?
6.總結
"實戰演練:利用Percona XtraBackup執行MySQL全量備份操作詳解"
1. 前言
本文將繼續上篇【MySQL備份】Percona XtraBackup基礎篇中對Percona XtraBackup的探索,深化討論其全量備份技術及詳盡的恢復策略。本章節旨在構建一套完備的備份恢復指南,進一步鞏固您的數據庫安全防線,確保數據資產的萬無一失。
在本篇內容中,我們將細致剖析Percona XtraBackup執行全量備份的高效實踐,這一核心功能不僅能夠實時捕捉數據庫狀態的完整映像,還依托其先進的日志處理機制,保證備份數據的絕對一致性和可靠性。您將學習到如何運用簡潔明了的命令行指令,安全無礙地將數據庫快照存置于指定位置,為數據保護筑起第一道堅固壁壘。
緊接著,文章將引領您步入數據恢復的精密藝術殿堂。從備份到恢復的無縫對接,是檢驗備份方案成色的真正試金石。我們將逐步拆解恢復流程的每一個關鍵環節:從安全停機、數據遷移與權限配置,到細膩的預處理步驟,直至數據庫服務的順利重啟與健康狀況的全面核查。每一步都精心設計,確保在面對不可預見的數據危機時,能夠迅速恢復業務運營,維持數據連續性和服務穩定性。
通過本篇的深度解析,您不僅能掌握Percona XtraBackup全量備份的精髓,更能領略其在數據恢復領域的獨到之處,為您的數據庫管理技能樹增添一份堅實保障。無論是對初學者的啟蒙,還是對資深DBA的技能進階,本篇章節均是不可或缺的知識寶典。
2.準備工作
2.1.環境信息
主機IP | 操作系統 | Mysql版本 | XtraBackup版本 |
---|---|---|---|
172.17.0.2 | CentOS Stream release 9 | 8.0.37 | 8.0.35 |
2.2.創建備份目錄
mkdir -p /data/backup
2.3.配置/etc/my.cnf文件
[xtrabackup]
host=localhost
port=3306
user=root
password=123456
socket=/var/lib/mysql/mysql.sock
target_dir=/data/backup
2.4.授予root用戶BACKUP_ADMIN權限
grant BACKUP_ADMIN on *.* to 'root'@'%'
LOCK INSTANCE FOR BACKUP 是MySQL 8.0引入的一種新的備份相關SQL語句,主要用于在進行數據庫備份時,以一種更為細粒度和高效的方式控制對數據庫實例的訪問,以保證備份的一致性。這個命令的工作原理及特點如下:
目的:在執行備份操作時,此命令用于獲取一個實例級別的鎖,該鎖允許在備份過程中繼續執行DML(數據操作語言,如INSERT、UPDATE、DELETE)操作,同時防止那些可能導致數據快照不一致的DDL(數據定義語言,如CREATE、ALTER、DROP)操作和某些管理操作。這樣可以在不影響數據庫服務的情況下進行備份,特別適用于需要最小化服務中斷的在線備份場景。
權限需求:執行LOCK INSTANCE FOR BACKUP語句需要用戶具備BACKUP_ADMIN權限。這是一個專門為了備份相關的高級操作而設計的權限級別。
兼容性:此特性是在MySQL 8.0及以上版本中引入的,早于8.0的MySQL版本并不支持這一語句,因此在使用舊版本時,可能需要依賴其他機制(如FLUSH TABLES WITH READ LOCK)來確保備份的一致性。
解鎖:執行備份后,需要使用UNLOCK INSTANCE語句來釋放之前由LOCK INSTANCE FOR BACKUP獲得的鎖,從而恢復正常操作。
與傳統備份命令的對比:相比于傳統的備份方法,如使用FLUSH TABLES WITH READ LOCK,LOCK INSTANCE FOR BACKUP提供了更小的性能影響,因為它不會完全阻止寫操作,只是限制了可能引起數據不一致的活動,更適合于高可用性和高性能要求的生產環境。
3.全量備份
登陸數據庫查看現有的的數據,可以看到現在有一個tes1的庫
進行全量備份,最后看到 completed OK!代表成功
xtrabackup --backup --target-dir=/data/backup --datadir=/var/lib/mysql --user=root --password=123456 --host=172.17.0.2 --port=3306
在/data/backup目錄下可以看到備份的數據
登陸數據庫刪除tes1庫
4.準備備份?
使用Percona XtraBackup進行全量備份后,在某些特定場景下確實可以直接使用備份數據,但這并不意味著不需要準備備份(prepare step)。備份準備是確保數據一致性的一個重要步驟,尤其是在進行數據恢復操作之前。具體是否需要準備備份取決于你的備份目的和后續操作:
-
立即恢復: 如果你計劃立即在相同或類似的MySQL環境中恢復這個備份,你應該執行備份準備步驟。這一步驟會應用未完成的事務日志(redo log),確保備份數據的一致性,并將數據文件轉換成可以直接用于啟動MySQL服務的狀態。
xtrabackup --prepare --target-dir=<備份目錄>
-
備份存檔或復制: 如果你只是想創建一個備份副本用于存檔或者復制到其他服務器上,理論上可以在不進行準備的情況下直接復制備份目錄。但請注意,未經準備的備份在恢復時仍需經過準備步驟才能使用。
-
增量備份基礎: 如果計劃在這個全量備份的基礎上執行增量備份,也不需要立即準備這個全量備份。增量備份會記錄自上次備份以來的變化,因此全量備份保持原樣即可。
總結來說,盡管在某些情況下全量備份后直接存檔或作為增量備份基礎可以不立即執行準備步驟,但在準備將數據用于恢復或確保數據一致性時,備份準備是必不可少的。最佳實踐中,建議在備份流程中包括準備步驟,以確保備份數據隨時可用于快速且可靠地恢復。
5.數據恢復?
停止MySQL服務進行恢復數據
systemctl stop mysqld
rsync -avrP /data/backup/ /var/lib/mysql/
恢復數據時,一定要記得更改數據目錄下的文件擁有者以及所屬組權限,否則mysql無法啟動
chown -R mysql:mysql /var/lib/mysql
重啟數據庫查看數據是否恢復,可以看到之前被刪除的tes1數據庫已經成功恢復
6.總結
需要注意的是,在執行恢復之前需要關閉MySQL服務器。您不能恢復到正在運行的mysqld實例的數據目錄(導入部分備份時除外)。由于文件的屬性將被保留,在大多數情況下,您需要mysql在啟動數據庫服務器之前將文件的屬主和屬組更改為mysql.mysql。