全部產品
Search
文件中心

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

更新時間:Sep 14, 2024

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

說明

前提條件

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

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

    • 系列:高可用系列

    • 儲存類型:本地SSD盤

    說明

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

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

示範環境

本地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. 執行如下命令解壓邏輯備份檔案,包括系統預設的資料庫壓縮檔以及自行建立的資料庫壓縮檔。

    tar xvf <自訂檔案名稱>.tar -C /tmp

    樣本如下:

    tar xvf hins123456.tar -C /tmp

    解壓縮

    說明

    如果解壓過程中出現類似This does not look like a tar archive的錯誤提示,請確認您下載的是否為RDS邏輯備份檔案。

  7. 解壓縮需要恢複的目標資料庫壓縮檔(.sql.gz結尾),命令如下:

    gzip -d /tmp/目標資料庫壓縮檔名稱

    樣本如下:

    gzip -d /tmp/testdata_datafull_202012101615_160xxxxxx.sql.gz
    說明

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

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

    說明

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

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

    mysql -u user -p <空資料庫名> < /tmp/解壓縮的資料庫檔案

    樣本如下:

    mysql -u user -p testdb < /tmp/testdata_datafull_202012101615_160xxxxxx.sql
    說明
    • 執行整行命令後會提示您輸入密碼,輸入後按斷行符號即可。

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

  10. 登入資料庫後查看錶,若已經顯示有了資料,說明已經遷移成功。

常見問題

  • 為什麼執行個體沒有邏輯備份?

    系統發起的備份預設為物理備份,如果需要邏輯備份,需要手動發起備份。詳情請參見自動備份

  • 為什麼下載邏輯備份時,顯示的備份組恢復點為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