目錄
1.關于Percona XtraBackup
2.?Percona XtraBackup有哪些特點?
3.安裝Percona XtraBackup
3.1.環境信息
3.2.安裝步驟?
4.實戰演練
4.1.全量備份與恢復
?4.2.總結?
1.關于Percona XtraBackup
Percona XtraBackup是世界上唯一的開源、免費的MySQL熱備份 為InnoDB和XtraDB執行非阻塞備份的軟件 數據庫。使用Percona XtraBackup,您可以獲得以下好處:
快速可靠地完成備份
備份期間不中斷的事務處理
節省磁盤空間和網絡帶寬
自動備份驗證
更快的恢復時間導致更高的延遲
2.?Percona XtraBackup有哪些特點?
以下是Percona XtraBackup功能的簡短列表。
創建熱InnoDB備份而無需暫停數據庫
對MySQL進行增量備份
將壓縮的MySQL備份流式傳輸到另一臺服務器
在線在MySQL服務器之間移動表
輕松創建新的MySQL復制副本
備份MySQL而不增加服務器負載
備份鎖是Percona Server 5.6+中可用的
FLUSH TABLES WITH READ LOCK
的輕量級替代方案。Percona XtraBackup使用它們自動復制非InnoDB數據,以避免阻塞修改InnoDB表的DML查詢。Percona XtraBackup根據每秒IO操作數執行限制。
Percona XtraBackup跳過輔助索引頁,并在準備緊湊備份時重新創建它們。
Percona XtraBackup甚至可以從完整備份中導出單個表,無論InnoDB版本如何。
使用Percona XtraBackup導出的表可以導入Percona Server 5.1、5.5或5.6+或MySQL 5.6+。
3.安裝Percona XtraBackup
3.1.環境信息
主機IP | 操作系統 | Mysql版本 | XtraBackup版本 |
---|---|---|---|
172.17.0.2 | CentOS Stream release 9 | 8.0.37 | 8.0.35 |
3.2.安裝步驟?
Percona XtraBackup的安裝方法有三中YUM倉庫安裝,RPM包安裝,源碼編譯安裝,下面介紹到的是YUM倉庫安裝
-
以
root
用戶身份或使用sudo運行以下命令來安裝Percona yum倉庫:sudo yum install \ https://repo.percona.com/yum/percona-release-latest.\ noarch.rpm
-
啟用存儲庫:
sudo percona-release enable-only tools release
如果Percona XtraBackup預期與 上游MySQL服務器,只需要開啟`tools倉庫:
sudo percona-release enable-only tools
-
通過運行以下命令安裝Percona XtraBackup:
sudo yum install percona-xtrabackup-80
警告:
在CentOS 6上安裝Percona XtraBackup之前,請確保安裝了
libev
軟件包。對于此操作系統,可以從EPEL存儲庫中獲得libev
包。 -
要對使用
LZ4
或ZSTD
壓縮算法進行的備份進行重新編譯,請安裝相應的軟件包:sudo yum install zstd
4.實戰演練
創建備份目錄
mkdir -p /data/backup
xtrabackup配置都是通過選項完成的,也可以通過/etc/my.cnf進行配置,如下所示:
[xtrabackup] host=localhost port=3306 user=root password=123456 socket=/var/lib/mysql/mysql.sock target_dir=/data/backup
授予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
提供了更小的性能影響,因為它不會完全阻止寫操作,只是限制了可能引起數據不一致的活動,更適合于高可用性和高性能要求的生產環境。4.1.全量備份與恢復
登陸數據庫查看現有的的數據,可以看到現在有一個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庫
停止MySQL服務進行恢復數據
systemctl stop mysqld
rsync -avrP /data/backup/ /var/lib/mysql/
恢復數據時,一定要記得更改數據目錄下的文件擁有者以及所屬組權限,否則mysql無法啟動
chown -R mysql:mysql /var/lib/mysql
重啟數據庫查看數據是否恢復,可以看到之前被刪除的tes1數據庫已經成功恢復
?4.2.總結?
需要注意的是,在執行恢復之前需要關閉MySQL服務器。您不能恢復到正在運行的mysqld實例的數據目錄(導入部分備份時除外)。由于文件的屬性將被保留,在大多數情況下,您需要mysql在啟動數據庫服務器之前將文件的屬主和屬組更改為mysql.mysql。