如果您希望在本地重新建立一個同樣體量MySQL數據庫,并且將RDS for MySQL數據全部遷移,可以使用本章節操作將下載的.qp文件在本地進行重建。
操作流程
1. 下載RDS for MySQL實例中對應時間點的全備文件。
2. 將全備文件上傳到本地用以重建數據庫。
3. 使用qpress工具將全備文件解壓。
4. 通過Xtrabackup工具將全備文件恢復到數據庫的data目錄中,并將數據庫原數據保留到data_back文件中。
5. 重啟數據庫,數據重建成功。
約束限制
本章節僅使用從RDS for MySQL 5.6、5.7、8.0版本實例下載的全量備份文件在本地恢復到對應版本自建數據庫,不包括增量備份的恢復操作。
自建MySQL數據庫內核小版本需與RDS for MySQL版本號一致。
通過mysql -V或mysqld --version命令,可以查看MySQL內核版本。
僅支持恢復到本地為Linux操作系統的數據庫。
由于開源備份工具目前僅支持x86包,不支持ARM,因此,不支持ARM的ECS自建庫使用本章操作進行備份文件恢復。您可以使用DRS遷移或數據導出導入的方式。
全量備份文件恢復到自建數據庫將使用以下三個軟件:
? MySQL數據庫
? qpress工具
? Percona XtraBackup工具
? 請使用對應版本工具,否則將無法恢復成功。
表 版本對應關系
| 數據庫 | qpress | Percona XtraBackup |
|---|---|---|
| MySQL 8.0 | qpress 7 | XtraBackup 8.0.0及以上版本 |
| MySQL 5.7、MySQL 5.6 | qpress 7 | XtraBackup 2.4.9及以上版本 |
在進行恢復階段請勿在本地自建數據庫運行其他業務。
步驟一:在RDS for MySQL下載全量備份文件
RDS for MySQL實例會在固定時間進行自動全備任務,也可以由您指定時間進行手動全備任務,其生成的.qp文件支持下載以及在本地進行恢復自建數據庫。
1. 您可以在RDS界面單擊實例名稱,選擇“備份恢復 > 全量備份 > 下載”,下載全量備份文件。
2. 通過文件傳輸工具(例如WinSCP)將全備文件上傳到本地MySQL庫所在的Linux設備。
步驟二:在本地MySQL安裝qpress和XtraBackup
方式一:手動安裝
1. 下載正確版本的qpress和XtraBackup,也可以根據下表進行下載。下載完成后將安裝包上傳到本地MySQL庫所在的Linux設備。
? 下載qpress工具://repo.percona.com/yum/release/
? 下載Percona XtraBackup工具:
對于MySQL 5.6和5.7版本,下載及其以上版本。
對于MySQL 8.0版本,下載及其以上版本。
表 下載示例
| 工具 | 下載實例 |
|---|---|
| MySQL 5.6 | mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz |
| MySQL 5.7 | mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz |
| MySQL 8.0 | mysql-8.0.26-linux-glibc2.12-x86_64.tar |
| qpress | |
| Percona XtraBackup | (MySQL 5.6、5.7) |
(MySQL 8.0) |
2. 安裝qpress rpm包。以Enterprise Linux 7(CentOS 7, RHEL 7, Rocky Linux 7, AlmaLinux 7)操作系統為例。
rpm -ivh qpress-11-1.el7.x86_64.rpm
3. 解壓Xtrabackup包,并改名為“xtrabackup”。
tar -zxvf percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz
mv percona-xtrabackup-2.4.9-Linux-x86_64 xtrabackup
4. xtrabackup添加到環境變量。
echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile
mv xtrabackup/ /usr/local/
source /etc/profile
方式二:wget安裝
1. 安裝包。
wget //repo.percona.com/yum/release/7/RPMS/x86_64/qpress-11-1.el7.x86_64.rpm
rpm -ivh qpress-11-1.el7.x86_64.rpm
2. 安裝Percona XtraBackup。
? MySQL 5.6、5.7,以下載并安裝Percona XtraBackup 2.4.9為例
wget //downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm --nodeps --force
? MySQL 8.0,以下載并安裝Percona XtraBackup 8.0為例
wget //downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.32-26/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.32-26.1.el7.x86_64.rpm
rpm -ivh percona-xtrabackup-80-8.0.32-26.1.el7.x86_64.rpm --nodeps --force
步驟三:使用備份文件恢復數據到自建MySQL
1. 創建一個臨時目錄“backupdir”。
mkdir backupdir
2. 解壓全備文件。
說明
解壓全備文件到臨時目錄“backupdir”前,需要保證臨時目錄下為空,再進行解壓,避免恢復異常。
? MySQL 5.6、5.7
xbstream -x -p 4 < ./全備文件.qp -C ./backupdir/
innobackupex --parallel 4 --decompress ./backupdir
? MySQL 8.0
xbstream -x -p 4 < ./全備文件.qp -C ./backupdir/
xtrabackup --parallel 4 --decompress --target-dir=./backupdir
3. 刪除qp文件。
find ./backupdir/ -name '*.qp' | xargs rm -f
4. 應用redo日志。
? MySQL 5.6、5.7
innobackupex --apply-log ./backupdir
? MySQL 8.0
xtrabackup --prepare --target-dir=./backupdir
5. 備份數據。
a. 停止MySQL數據庫服務。
service mysql stop
如果是MySQL 5.7,需執行如下命令停止MySQL數據庫服務:
/bin/systemctl stop mysqld.service
b. 備份原來的數據庫目錄。
mv /usr/local/mysql/data /usr/local/mysql/data_bak
mkdir /usr/local/mysql/data
c. 創建新的數據庫目錄并修改目錄權限。
chown mysql:mysql /usr/local/mysql/data
6. 恢復數據到自建庫,并修改目錄權限。
執行該步驟前,需要清空自建庫的“data”目錄,參考5.b。
? MySQL 5.6、5.7
innobackupex --defaults-file=/etc/my.cnf --copy-back ./backupdir
chown -R mysql:mysql /usr/local/mysql/data
? MySQL 8.0
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=./backupdir
chown -R mysql:mysql /usr/local/mysql/data
說明
命令中的相對路徑(./backupdir)可替換成絕對路徑。
“--defaults-file”為MySQL配置文件位置,您可以根據實際情況進行修改。
7. 啟動數據庫。
service mysql start
如果是MySQL 5.7,需執行如下命令啟動數據庫:
/bin/systemctl start mysqld.service
8. 登錄數據庫,查看數據恢復結果。
show databases