關系數據庫MySQL版支持將實例產生的物理備份文件恢復到自建數據庫。
操作場景
- 如果您暫時不再使用關系數據庫MySQL版,您可以使用本方法將實例的物理備份恢復到自建數據庫從而保留實例中的數據。
- 如果您的實例已注銷,而您又保留有下載好的物理備份文件,您可以使用本方法將實例的物理備份恢復到自建數據庫。
前提條件
- 實例使用對象存儲來保存備份,使用備份機存放的備份暫不支持直接下載。
- 實例未開啟透明數據加密,開啟透明數據加密的實例暫不支持進行備份操作。
影響
- 如果您的自建數據庫正在運行其他業務,將物理備份恢復到此數據庫后,原有業務將不可用。建議您將物理備份恢復到無其他業務的數據庫。
- 本文介紹的恢復方案是將數據恢復到一個新建的數據庫數據目錄中,對自建數據庫中原數據無影響。
注意
建議執行恢復任務前,確認自建的MySQL數據庫版本包與當前備份的數據庫實例的版本包一致。由于不同版本包之間的特性差異可能導致恢復失敗。如果您需要獲取和當前備份數據庫實例一致的版本可提單進行咨詢。
在執行恢復任務前,請確保當時備份的數據庫實例中不存在與自建數據庫同名的數據庫或者表,以防數據覆蓋造成的數據丟失。
在執行恢復任務時,如果您因某種原因中斷了恢復任務,可能導致數據恢復失敗。
操作步驟
1. 準備工作
1.1 環境準備
- 本文以
CentOS Linux release 7.9.2009系統為例,其他Linux發行版本請根據實際情況適配相關命令。 - 在進行恢復操作之前您需要部署自建MySQL數據庫服務,其中MySQL大版本需和備份文件源實例的大版本相同。
1.2 工具準備
-
安裝qpress、zstd
您可以根據您主機的CPU架構下載相適配的qpress、zstd可執行文件,或編譯源碼獲得可執行文件 qpress、zstd,之后執行如下操作給予qpress、zstd文件可執行權限并將qpress、zstd放入path。
# 給予qpress、zstd文件可執行權限 sudo chmod 775 qpress sudo chmod 775 zstd # 將qpress、zstd文件拷貝到/usr/bin中 sudo cp qpress /usr/bin/ sudo cp zstd /usr/bin/ -
安裝Percona、XtraBackup
您需要根據MySQL版本和您使用的Linux發行版本來下載相適配的Percona XtraBackup,MySQL5.7建議使用Percona XtraBackup 2.4.28,MySQL8.0 建議使用 Percona XtraBackup80 8.0.35-31。
# 5.7 sudo yum localinstall -y percona-xtrabackup-24-2.4.28-2.el7.x86_64.rpm #8.0 sudo yum localinstall -y percona-xtrabackup-80-8.0.35-31.1.el7.x86_64.rpm
2. 下載備份文件
您可以參考下載備份來下載文件并將文件傳輸到待恢復的主機。
3. 解壓備份文件
下載的備份文件文件名中無后綴信息,文件格式實際為 .qp.xb,在進行恢復操作之前需要對下載的文件進行解壓。此處假設下載的備份文件名為test_bk_file,解壓路徑為/data/bk_data,請跳轉到下載文件所在路徑執行以下命令。
## 步驟一:創建備份目錄,此目錄可根據需求更改
sudo mkdir -p /data/bk_data
## 步驟二:解包
sudo xbstream -x -v -C /data/bk_data < test_bk_file
## 步驟三:解壓縮
# 5.7
innobackupex --decompress --remove-original /data/bk_data
# 8.0
xtrabackup --decompress --remove-original --target-dir=/data/bk_data
4. 恢復數據
4.1 恢復前數據準備
執行以下命令準備恢復數據
## 5.7
innobackupex --defaults-file=/data/bk_data/backup-my.cnf --apply-log /data/bk_data
## 8.0
xtrabackup --defaults-file=/data/bk_data/backup-my.cnf --prepare --target-dir=/data/bk_data
4.2 修改自建數據庫配置文件
1.編輯數據庫配置文件,/etc/my.cnf為自建數據庫的配置文件,可根據實際情況替換路徑。
/etc/my.cnf為自建數據庫的配置文件,可根據實際情況替換路徑
sudo vim /etc/my.cnf
2.將恢復好的數據移動至期望的數據目錄
mv /data/bk_data /data/your_newdata
3.修改datadir為想要放置mysql數據的路徑,需確保datadir指向路徑存在且為空。
datadir = /data/your_newdata
4.(8.0可跳過此步驟)MySQL5.7還需要修改以下配置
# 此參數定義了undo logs的文件數量
innodb_undo_tablespaces=3
# 此參數定義了undo logs的路徑
innodb_undo_directory=/data/your_newdata
注意:參數 innodb_undo_tablespaces需和 /data/bk_data/backup-my.cnf中的配置相同,您可通過 cat /data/bk_data/backup-my.cnf | grep innodb_undo_tablespaces 來查詢備份配置中該變量的值。
5. 啟動數據庫
-
(本步驟可選)在關系數據庫MySQL版的參數管理中查看lower_case_table_names的值,查看方法請參考參數設置,在修改自建數據庫配置文件/etc/my.cnf中修改參數lower_case_table_names的值和查詢結果保持一致。
lower_case_table_names = 1 -
修改數據目錄權限為mysqld啟動用戶,此處以mysql為例。
sudo chown mysql:mysql /data/your_newdata -R -
執行以下命令以啟動mysqld服務。
sudo mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/your_newdata &
6. 連接數據庫并驗證
-
執行以下命令連接數據庫。
mysql -h{自建數據庫所在主機ip} -P{數據庫服務端口} -u{源關系數據庫MySQL版實例的用戶名} -p{對應密碼} -
執行如下命令檢查是否有源實例中的數據庫。
show databases;