本文介紹如何使用Percona XtraBackup工具,將RDS MySQL的物理備份檔案恢複到自建資料庫。
背景
RDS MySQL支援將執行個體備份檔案恢複到自建資料庫,當前支援物理備份檔案恢複、邏輯備份檔案恢複等多種方式。如何選擇資料恢複方案,請參見MySQL資料恢複方案。
您可以前往RDS管理主控台,在左側導覽列選擇備份復原,然後在基礎備份列表 > 資料備份中查看執行個體備份的類型。
如果沒有物理備份,可以手動建立備份後,再進行本文操作。建立方法,請參見手動備份。
應用情境
如果您未來一段時間不再使用RDS MySQL,或執行個體已釋放但有物理備份檔案,您可以將RDS MySQL資料庫的物理備份恢複到本地自建資料庫,以保留RDS MySQL中的資料。
前提條件
RDS MySQL執行個體基礎配置需滿足以下條件:
大版本:8.0、5.7、5.6、5.5
系列:高可用系列
儲存類型:高效能本地碟
說明您可以在執行個體基本資料頁面查看以上資訊。
僅如上版本的執行個體支援下載物理備份。如果您的執行個體是基礎系列執行個體,請參見本文常見問題。
RDS執行個體中的表未通過TDE加密。
重要加密表會導致恢複出錯,請先執行解密操作。
您可在RDS控制台目標執行個體資料安全性TDE頁面查看TDE開啟狀況。
RAM帳號需要具備下載備份檔案的許可權,授權操作請參見添加下載備份檔案許可權給唯讀子帳號。
使用限制
僅適用於本地碟執行個體的物理備份檔案恢複。如需恢複雲端硬碟執行個體的快照備份,請參見RDS MySQL快照備份檔案恢複到自建資料庫。
用於恢複備份檔案中的全部資料。如僅需恢複部分庫表,請參見RDS MySQL邏輯備份檔案恢複到自建資料庫。
目前僅支援將RDS MySQL的物理備份檔案恢複到Linux系統中的自建MySQL資料庫中。
暫不支援MGR(MySQL Group Replication)叢集的資料恢複。
影響
如果將RDS MySQL物理備份恢複到當前運行其他業務的自建資料庫,原有業務將不可用。
本文介紹的恢複方案將資料恢複到建立的資料庫資料目錄中,不影響自建資料庫中的原資料。
技術實現
本文介紹的物理備份恢複方式主要是通過如下流程實現的:
對資料庫進行全量物理備份。
下載物理備份檔案到本地,通過
qpress
工具進行解壓。使用
Percona XtraBackup
工具,將解壓後的備份檔案恢複到自建資料庫的資料目錄中。重啟資料庫後,即可在自建資料庫中查看到原先位於RDS MySQL中的資料。
注意事項
備份下載連結有效時間為一小時,到期後請重新整理頁面擷取新連結。
請勿修改或刪減備份檔案內容,否則可能導致檔案損壞且無法恢複。如需修改,請先恢複到自建資料庫。
費用說明
準備工作
環境準備
工具準備
1. 下載備份檔案
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
在左側導覽列單擊備份復原。
在基础备份列表 > 資料備份中,找到目標物理備份,單擊操作列的執行個體備份下載。
如果沒有物理備份檔案,您可以手動備份,具體操作,請參見手動備份。
如果跳轉至進階下載頁面,表示您的RDS執行個體為雲端硬碟執行個體,請參見RDS MySQL快照備份檔案恢複到自建資料庫進行恢複。
在執行個體備份下載對話方塊,根據實際情況,選擇並複製內網地址或外網地址。
重要使用內網地址下載時,需要在同地區的VPC網路中才可下載,在跨地區VPC以及傳統網路的伺服器端無法下載。
使用外網地址下載時,超出外網下載免費額度後需要支付外網流量費用。更多資訊,請參見費用說明。
備份下載地址有效時間為一個小時,超過有效時間後可重新整理頁面擷取最新連結。
請勿修改或刪減已備份的檔案內容,可能造成備份檔案損壞,無法恢複。如需修改,請恢複到自建資料庫後再進行修改操作。
登入本地自建MySQL所在的Linux伺服器,執行如下命令下載物理備份。
wget -c 'https://****.bak.rds.aliyuncs.com/****_xb.qp?****' -O test_xb.qp
說明請將上述命令中的
https://****.bak.rds.aliyuncs.com/****_xb.qp?****
替換為實際複製的備份下載地址。備份檔案下載後請您及時儲存,避免泄露。本文樣本將
test_xb.qp
作為另存的檔案名稱,您可以自訂該檔案名稱,但檔案名稱尾碼必須與下載地址裡的尾碼保持一致。目前RDS MySQL備份下載地址的尾碼名存在兩種格式
_xb.qp
或_qp.xb
,您可以在下載連結中查看備份檔案尾碼格式。RDS MySQL 5.5的物理備份格式為
tar.gz
。
常見下載問題
2. 解壓備份檔案
請根據備份檔案的實際尾碼,選擇相關命令解壓備份壓縮包。
請參考準備工作章節,先安裝Percona XtraBackup
和qpress
,然後執行以下命令。
常見解壓問題
3. 恢複資料
恢複資料庫前,請先停止自建資料庫服務。
您可以使用ps -ef | grep '[m]ysql'
命令查看是否存在mysql
相關進程,並使用sudo kill -9 <PID>
將進程結束。
MySQL 8.0恢複
恢複前準備。
/u01/xtrabackup80/bin/xtrabackup --defaults-file=/var/mysql_bkdata/backup-my.cnf --prepare --target-dir=/var/mysql_bkdata/
參數解釋:
參數
含義
--defaults-file
通過傳入設定檔設定MySQL預設選項。
RDS MySQL備份檔案中,提供名為
backup-my.cnf
的設定檔,該檔案位於備份解壓目錄,即/var/mysql_bkdata/
。--prepare
XtraBackup工具的準備命令。
--target-dir
備份解壓目錄
/var/mysql_bkdata/
。修改自建資料庫的資料目錄(datadir)。
恢複資料。
sudo xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/var/mysql_bkdata/
參數解釋:
參數
含義
--defaults-file
自建資料庫的
my.cnf
檔案,根據此設定檔中設定的資料目錄(datadir),擷取恢複資料的目標路徑。--copy-back
XtraBackup工具的恢複命令。
--target-dir
備份解壓目錄
/var/mysql_bkdata/
,XtraBackup工具將此目錄資料恢複到自建資料庫的資料目錄中。
MySQL 5.7恢複
恢複前準備。
innobackupex --defaults-file=/var/mysql_bkdata/backup-my.cnf --apply-log /var/mysql_bkdata/
參數解釋:
參數
含義
--defaults-file
通過傳入設定檔設定MySQL預設選項。
RDS MySQL備份檔案中,提供名為
backup-my.cnf
的設定檔,該檔案位於備份解壓目錄,即/var/mysql_bkdata/
。--apply-log
XtraBackup工具的準備命令。
該命令後配置存放備份檔案的目錄,即備份解壓目錄
/var/mysql_bkdata/
。修改自建資料庫設定檔
my.cnf
。編輯資料庫設定檔。
sudo vim /etc/my.cnf
查詢資料庫設定檔路徑,請參見準備工作。
按
i
鍵進入編輯模式,修改datadir的參數取值為/var/mysql_newdata
。datadir = /var/mysql_newdata
mysql_newdata
為自建資料庫的新資料目錄,已在準備工作中建立。在
my.cnf
中添加如下內容。innodb_undo_tablespaces=2 innodb_undo_directory=/var/mysql_newdata
重要參數innodb_undo_tablespaces的取值需要與
/var/mysql_bkdata/backup-my.cnf
中的取值相同,您可以使用cat /var/mysql_bkdata/backup-my.cnf | grep innodb_undo_tablespaces
查詢。按
Esc
鍵退出編輯模式,輸入:wq!
儲存並退出。
恢複資料。
sudo innobackupex --defaults-file=/etc/my.cnf --copy-back /var/mysql_bkdata/
參數解釋:
參數
含義
--defaults-file
自建資料庫的
my.cnf
檔案,根據此設定檔中設定的資料目錄(datadir),擷取恢複資料的目標路徑。--copy-back
XtraBackup工具的恢複命令。
該命令後配置存放備份檔案的目錄,即備份解壓目錄
/var/mysql_bkdata/
,XtraBackup工具將此目錄資料恢複到自建資料庫的資料目錄中。
MySQL 5.6恢複
恢複前準備。
innobackupex --defaults-file=/var/mysql_bkdata/backup-my.cnf --apply-log /var/mysql_bkdata/
參數解釋:
參數
含義
--defaults-file
通過傳入設定檔設定MySQL預設選項。
RDS MySQL備份檔案中,提供名為
backup-my.cnf
的設定檔,該檔案位於備份解壓目錄,即/var/mysql_bkdata/
。--apply-log
XtraBackup工具的準備命令。
該命令後配置存放備份檔案的目錄,即備份解壓目錄
/var/mysql_bkdata/
。修改自建資料庫的資料目錄(datadir)。
恢複資料。
sudo innobackupex --defaults-file=/usr/my.cnf --copy-back /var/mysql_bkdata/
參數解釋:
參數
含義
--defaults-file
自建資料庫的
my.cnf
檔案,根據此設定檔中設定的資料目錄(datadir),擷取恢複資料的目標路徑。--copy-back
XtraBackup工具的恢複命令。
該命令後配置存放備份檔案的目錄,即備份解壓目錄
/var/mysql_bkdata/
,XtraBackup工具將此目錄資料恢複到自建資料庫的資料目錄中。
MySQL 5.5恢複
恢複前準備。
innobackupex --defaults-file=/var/mysql_bkdata/backup-my.cnf --apply-log /var/mysql_bkdata/
參數解釋:
參數
含義
--defaults-file
通過傳入設定檔設定MySQL預設選項。
RDS MySQL備份檔案中,提供名為
backup-my.cnf
的設定檔,該檔案位於備份解壓目錄,即/var/mysql_bkdata/
。--apply-log
XtraBackup工具的準備命令。
該命令後配置存放備份檔案的目錄,即備份解壓目錄
/var/mysql_bkdata/
。修改自建資料庫設定檔
my.cnf
。編輯資料庫設定檔。
sudo vim /etc/my.cnf
查詢資料庫設定檔路徑,請參見準備工作。
按
i
鍵進入編輯模式,添加datadir參數。datadir = /var/mysql_newdata
mysql_newdata
為自建資料庫的新資料目錄,已在準備工作中建立。在
my.cnf
中添加如下內容。innodb_log_file_size=1048576000
重要參數innodb_log_file_size的取值需要與
/var/mysql_bkdata/backup-my.cnf
中的取值相同,您可以使用cat /var/mysql_bkdata/backup-my.cnf | grep innodb_log_file_size
查詢。按
Esc
鍵退出編輯模式,輸入:wq!
儲存並退出。
恢複資料。
sudo innobackupex --defaults-file=/etc/my.cnf --copy-back /var/mysql_bkdata/
參數解釋:
參數
含義
--defaults-file
自建資料庫的
my.cnf
檔案,根據此設定檔中設定的資料目錄(datadir),擷取恢複資料的目標路徑。--copy-back
XtraBackup工具的恢複命令。
該命令後配置存放備份檔案的目錄,即備份解壓目錄
/var/mysql_bkdata/
,XtraBackup工具將此目錄資料恢複到自建資料庫的資料目錄中。
常見恢複問題
4. 啟動資料庫
MySQL 8.0、5.7啟動
(可選)在RDS MySQL管理主控台中查看執行個體參數lower_case_table_names的取值,如果取值為
1
,則需要修改自建資料庫設定檔my.cnf
。編輯資料庫設定檔。
sudo vim /etc/my.cnf
查詢資料庫設定檔路徑,請參見準備工作。
按
i
進入編輯模式,添加如下內容。lower_case_table_names=1
按
Esc
鍵退出編輯模式,輸入:wq!
儲存並退出。
為資料目錄授權。
sudo chown -R mysql:mysql /var/mysql_newdata
執行如下命令,啟動MySQL進程。
sudo mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/var/mysql_newdata &
參數解釋:
參數
含義
--defaults-file
自建資料庫的設定檔路徑。本文以
/etc/my.cnf
為例,您可以參考準備工作,確認資料庫的設定檔路徑。--user
啟動資料庫的使用者。固定為mysql,無需修改。
--datadir
啟動資料庫使用的資料目錄。本文以
/var/mysql_newdata
為例,您可以參考準備工作,確認資料庫的資料目錄。
MySQL 5.6啟動
(可選)在RDS MySQL管理主控台中查看執行個體參數lower_case_table_names的取值,如果取值為
1
,則需要修改自建資料庫設定檔my.cnf
。編輯資料庫設定檔。
sudo vim /usr/my.cnf
查詢資料庫設定檔路徑,請參見準備工作。
按
i
進入編輯模式,添加如下內容。lower_case_table_names=1
按
Esc
鍵退出編輯模式,輸入:wq!
儲存並退出。
為資料目錄授權。
sudo chown -R mysql:mysql /var/mysql_newdata
執行如下命令,啟動MySQL進程。
sudo mysqld --defaults-file=/usr/my.cnf --user=mysql --datadir=/var/mysql_newdata &
參數
含義
--defaults-file
自建資料庫的設定檔路徑。本文以
/usr/my.cnf
為例,您可以參考準備工作,確認資料庫的設定檔路徑。--user
啟動資料庫的使用者。固定為mysql,無需修改。
--datadir
啟動資料庫使用的資料目錄。本文以
/var/mysql_newdata
為例,您可以參考準備工作,確認資料庫的資料目錄。
MySQL 5.5啟動
為資料目錄授權。
sudo chown -R mysql:mysql /var/mysql_newdata
執行如下命令,啟動MySQL進程。
sudo mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/var/mysql_newdata &
參數
含義
--defaults-file
自建資料庫的設定檔路徑。本文以
/etc/my.cnf
為例,您可以參考準備工作,確認資料庫的設定檔路徑。--user
啟動資料庫的使用者。固定為mysql,無需修改。
--datadir
啟動資料庫使用的資料目錄。本文以
/var/mysql_newdata
為例,您可以參考準備工作,確認資料庫的資料目錄。
常見啟動問題
5. 串連資料庫並驗證
執行如下命令,登入MySQL資料庫以驗證進程啟動成功。
mysql -u<源RDS MySQL執行個體帳號> -p<對應密碼>
說明該登入命令用於驗證恢複成功。若僅需查看錶資料,確保帳號有查詢許可權即可。
若忘記帳號或密碼,請在執行啟動MySQL進程命令時,傳入
--skip-grant-tables
參數,進程啟動後會忽略許可權檢查,允許無需賬戶密碼登入資料庫。登入成功後,您可以重新設定帳號和密碼。
執行如下命令,查看是否有RDS MySQL執行個體中的資料庫。
SHOW DATABASES;