MySQL內建的mysqldump工具可以實現將RDS MySQL邏輯備份檔案恢複到自建資料庫。本文介紹詳細的邏輯備份恢複資料庫操作步驟。
關於如何選擇資料恢複方案,請參見資料恢複方案概覽。
通過物理備份檔案恢複到自建資料庫請參見RDS MySQL物理備份檔案恢複到自建資料庫。
關於ApsaraDB for MySQL如何備份資料,請參見備份RDS資料。
您可以通過mysqldump將自建MySQL資料庫遷移至RDS MySQL執行個體,詳情請參見使用mysqldump遷移MySQL資料。關於mysqldump工具的選項設定,請參見RDS MySQL mysqldump選項設定。
前提條件
RDS MySQL執行個體需滿足以下條件:
大版本:8.0、5.7、5.6、5.5
系列:高可用系列
儲存類型:高效能本地碟
說明您可以前往執行個體基本資料頁面查看以上資訊。
已有邏輯備份。具體操作,請參見自動備份。
示範環境
本地MySQL資料庫安裝在64位的Linux系統中,且與ApsaraDB for MySQL的版本相同。本文使用CentOS 7的作業系統以及MySQL5.7版本為例進行示範。
邏輯備份恢複操作步驟
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
在左側導覽列中,單擊備份恢複。
在
列表中,找到要下載的邏輯備份,並單擊其右側的實例備份下載。在實例備份下載視窗,單擊外網地址最右側的複製,擷取資料備份檔案外網下載地址。
重要外網下載備份在超過免費額度的情況下會額外收取外網流量費用。更多資訊,請參見費用說明。
如果是相同VPC內的ECS和RDS執行個體,可以使用內網地址,速度更快更穩定。
登入自建資料庫所在Linux系統,執行如下命令下載邏輯備份檔案。
wget -c '<資料備份檔案外網下載地址>' -O <自訂檔案名稱>.tar
說明-c:啟用斷點續傳模式。
-O:將下載的結果儲存為指定的檔案。
解壓邏輯備份檔案,包括系統預設的資料庫壓縮檔以及自行建立的資料庫壓縮檔。
執行以下命令,解壓備份檔案。
tar xvf <自訂檔案名稱>.tar -C /tmp
說明如果解壓過程中出現類似
This does not look like a tar archive
的錯誤提示,請確認您下載的是否為RDS邏輯備份檔案。如果解壓過程中出現類似
Wrote only 512 of 10240 bytes. Exiting with failure status due to previous errors
的錯誤提示,請確認您的磁碟空間是否已滿,可通過變更配置擴容磁碟空間後再嘗試。
執行以下命令,查看解壓後的目錄結構。
tree /tmp/backup_root/ # 替換為實際解壓後的根目錄
多層級備份檔案結構樣本如下:
/tmp/backup_root/ ├── database1/ # 目標資料庫1目錄 │ ├── schema.sql # 資料庫結構檔案 │ └── data.sql # 資料檔案 ├── database2/ # 目標資料庫2目錄 │ ├── schema.sql │ └── data.sql └── config.txt # 備份中繼資料(非必須)
執行以下命令,進入目標資料庫目錄。
cd /tmp/backup_root/database_name # 替換為實際資料庫名
解壓縮需要恢複的目標資料庫壓縮檔(
.sql.gz
結尾),命令如下:gzip -d schema.sql.gz # 解壓結構檔案 gzip -d data.sql.gz # 解壓資料檔案
說明解壓縮後的.sql檔案用於在第10步進行匯入。
登入資料庫建立對應的空資料庫。命令如下:
說明下文中的user使用者需要具備能夠執行.sql檔案中所有SQL的許可權。
mysql -u user -p<資料庫密碼> create database <空資料庫名>; exit
使用如下命令將.sql檔案匯入對應資料庫。
# 匯入表結構 mysql -u user -p <空資料庫名> < schema.sql # 匯入資料 mysql -u user -p <空資料庫名> < data.sql
說明執行整行命令後會提示您輸入密碼,輸入後按斷行符號即可。
如果提示Can't find master key from keyring錯誤,請確認是否滿足本文開頭的前提條件。
驗證恢複結果。若資料庫中已經顯示有了資料,說明已經遷移成功。
mysql -u user -p mysql> USE <空資料庫名>; mysql> SHOW TABLES; # 檢查表是否存在 mysql> SELECT COUNT(*) FROM <表名>; # 驗證資料量
常見問題
為什麼執行個體沒有邏輯備份?
系統發起的備份預設為物理備份,如果需要邏輯備份,需要手動發起備份。詳情請參見自動備份。
為什麼下載邏輯備份時,顯示的備份組恢復點為0?
RDS MySQL的物理備份結合記錄備份可以實現按時間點恢複功能,所以會顯示具體的備份組恢復點(時間戳記),而邏輯備份不是用來按時間點恢複的,所以顯示為0。
報錯
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
如何解決?這是由於GTID導致的問題,您可以參考如下幾種方案:
開啟GTID後重新執行恢複操作。
不開啟GTID,可以將匯入檔案(
.sql
結尾)中的GTID_PURGED內容全部注釋掉,然後重新執行恢複操作。在沒有主從同步複製的情況下,可以登入資料庫後執行
RESET MASTER
命令,然後重新執行恢複操作。
報錯
ERROR 3546 (HY000) at line 26: @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED
如何解決?帶有GTID資訊的匯入檔案(
.sql
結尾),要求當前資料庫中無其他GTID資訊,請登入資料庫後執行RESET MASTER
進行重設,然後重新執行恢複操作。為什麼恢複的資料只在主庫中,從庫的資料沒有自動同步?
您可以檢查下匯入檔案(
.sql
結尾)中是否有SESSION.SQL_LOG_BIN= 0
,該設定會導致主庫的操作不會同步到從庫中。