全部產品
Search
文件中心

ApsaraDB RDS:RDS MySQL邏輯備份檔案恢複到自建資料庫

更新時間:Jun 28, 2025

MySQL內建的mysqldump工具可以實現將RDS MySQL邏輯備份檔案恢複到自建資料庫。本文介紹詳細的邏輯備份恢複資料庫操作步驟。

說明

前提條件

  • RDS MySQL執行個體需滿足以下條件:

    • 大版本:8.0、5.7、5.6、5.5

    • 系列:高可用系列

    • 儲存類型:高效能本地碟

    說明

    您可以前往執行個體基本資料頁面查看以上資訊。

  • 已有邏輯備份。具體操作,請參見自動備份

示範環境

本地MySQL資料庫安裝在64位的Linux系統中,且與ApsaraDB for MySQL的版本相同。本文使用CentOS 7的作業系統以及MySQL5.7版本為例進行示範。

邏輯備份恢複操作步驟

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列中,單擊備份恢複

  3. 基础备份列表 > 資料備份列表中,找到要下載的邏輯備份,並單擊其右側的實例備份下載

    說明
    • 邏輯備份需要您手動發起備份操作,具體操作,請參見手動備份

    • 如果沒有實例備份下載按鈕,請確認您的執行個體版本是否支援下載備份

  4. 實例備份下載視窗,單擊外網地址最右側的複製,擷取資料備份檔案外網下載地址。

    重要
    • 外網下載備份在超過免費額度的情況下會額外收取外網流量費用。更多資訊,請參見費用說明

    • 如果是相同VPC內的ECS和RDS執行個體,可以使用內網地址,速度更快更穩定。

  5. 登入自建資料庫所在Linux系統,執行如下命令下載邏輯備份檔案。

    wget -c '<資料備份檔案外網下載地址>' -O <自訂檔案名稱>.tar
    說明
    • -c:啟用斷點續傳模式。

    • -O:將下載的結果儲存為指定的檔案。

  6. 解壓邏輯備份檔案,包括系統預設的資料庫壓縮檔以及自行建立的資料庫壓縮檔。

    1. 執行以下命令,解壓備份檔案。

      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的錯誤提示,請確認您的磁碟空間是否已滿,可通過變更配置擴容磁碟空間後再嘗試。

    2. 執行以下命令,查看解壓後的目錄結構。

      tree /tmp/backup_root/  # 替換為實際解壓後的根目錄

      多層級備份檔案結構樣本如下:

      /tmp/backup_root/
      ├── database1/   # 目標資料庫1目錄
      │ ├── schema.sql # 資料庫結構檔案
      │ └── data.sql   # 資料檔案
      ├── database2/   # 目標資料庫2目錄
      │ ├── schema.sql
      │ └── data.sql
      └── config.txt    # 備份中繼資料(非必須)
  7. 執行以下命令,進入目標資料庫目錄。

    cd /tmp/backup_root/database_name  # 替換為實際資料庫名
  8. 解壓縮需要恢複的目標資料庫壓縮檔(.sql.gz結尾),命令如下:

    gzip -d schema.sql.gz  # 解壓結構檔案
    gzip -d data.sql.gz    # 解壓資料檔案
    說明

    解壓縮後的.sql檔案用於在第10步進行匯入。

  9. 登入資料庫建立對應的空資料庫。命令如下:

    說明

    下文中的user使用者需要具備能夠執行.sql檔案中所有SQL的許可權。

    mysql -u user -p<資料庫密碼>
    create database <空資料庫名>;
    exit
  10. 使用如下命令將.sql檔案匯入對應資料庫。

    # 匯入表結構
    mysql -u user -p <空資料庫名> < schema.sql
    
    # 匯入資料
    mysql -u user -p <空資料庫名> < data.sql
    說明
    • 執行整行命令後會提示您輸入密碼,輸入後按斷行符號即可。

    • 如果提示Can't find master key from keyring錯誤,請確認是否滿足本文開頭的前提條件。

  11. 驗證恢複結果。若資料庫中已經顯示有了資料,說明已經遷移成功。

    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進行重設,然後重新執行恢複操作。

    restmaster

  • 為什麼恢複的資料只在主庫中,從庫的資料沒有自動同步?

    您可以檢查下匯入檔案(.sql結尾)中是否有SESSION.SQL_LOG_BIN= 0,該設定會導致主庫的操作不會同步到從庫中。

    SQL_LOG_BIN