全部產品
Search
文件中心

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

更新時間:Sep 16, 2025

您可以使用RDS MySQL的備份下載功能,將RDS MySQL雲端硬碟執行個體的快照備份資料轉換成CSV或SQL檔案匯出,並將其恢複至本地或ECS上的自建MySQL資料庫中。

前提條件

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

    • 資料庫版本:8.0、5.7(支援Serverless執行個體)

    • 儲存類型:ESSD雲端硬碟、高效能雲端硬碟

    • 運行狀態:運行中

    說明
    • 您可以前往執行個體詳情頁的基本資料頁面查看以上資訊。

    • 已開啟資料歸檔功能的高效能雲端硬碟執行個體暫不支援進階下載功能,下載任務將執行失敗。

  • RDS執行個體未開啟TDE加密。執行個體中若存在加密過的表,會導致恢複過程出錯,請先對已加密的表執行解密

  • 請確保自建MySQL資料庫已開啟local_infile參數。

    說明
    • 查看local_infile參數狀態(ON表示已開啟):SHOW GLOBAL VARIABLES LIKE 'local_infile';

    • 開啟local_infile參數:SET GLOBAL local_infile=1;

功能限制

從下載的備份組(雲端硬碟執行個體的快照備份資料轉換成CSV檔案或SQL檔案)恢複到自建MySQL資料庫時,存在以下類型限制:

  • 不支援的二進位欄位類型BITBINARYVARBINARYTINYBLOBBLOBMEDIUMBLOBLONGBLOB

    說明
    • 如果備份組中包含這些欄位類型,它們將會以十六進位格式進行儲存。在匯入時,MySQL會將二進位欄位當作字串進行處理。此種情況下,需要手動在load data local infile命令中使用UNHEX函數將十六進位格式轉換為原始的二進位串。

    • BLOB類型的資料可以使用mysqldump 備份恢複到本地MySQL資料庫。

      備份資料:mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <自建資料庫名> --skip-triggers --skip-lock-tables > /tmp/<自建資料庫名>.sql

      恢複資料:mysql -h 127.0.0.1 -u 使用者名稱 -p 資料庫名 < 備份檔案.sql

  • 不支援的空間欄位類型GEOMETRYPOINTLINESTRINGPOLYGONMULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION

恢複前須知

  • Python指令碼維護狀態說明:本文所提供的restore_from_downloads.py指令碼僅為參考,當前已停止維護,請謹慎使用並做好相容性驗證。

  • 資料庫版本一致:建議RDS MySQL資料庫和自建MySQL資料庫版本保持一致。不同版本的資料庫間可能存在不相容的特性,導致恢複失敗。

  • 確保不存在同名的庫表:執行恢複命令前,請確保目標自建資料庫中沒有和備份資料中同名的資料庫,否則會導致恢複失敗。

  • 任務中斷:在進行恢複任務時,如果您因為某些原因中斷了恢複任務,可能會導致恢複資料不完整或恢複失敗,請謹慎操作。

  • 特殊字元處理:執行本文命令時,若檔案路徑、資料庫帳號或密碼中包含特殊字元(如&#空格等),必須用英文雙引號包裹,否則會報錯。例如:

    # 檔案路徑中若含特殊字元(&),路徑需用英文雙引號包裹
    python ./restore_from_downloads.py "/path/to/data&test" 127.0.0.1 3306 root zhtpasswordtest
    
    # 資料庫密碼含特殊字元(#、@),密碼需用英文雙引號包裹
    python ./restore_from_downloads.py /data 127.0.0.1 3306 root "#Test@20250821"

操作步驟

本樣本以RDS MySQL雲端硬碟執行個體的SQL檔案恢複至ECS執行個體(Alibaba Cloud Linux 3.2104 LTS 64位)的自建MySQL資料庫為例,其他環境請使用對應命令。

  1. 下載並解壓備份檔案

    1. 登入RDS控制台,使用下載備份功能將RDS MySQL雲端硬碟執行個體的備份檔案轉換成CSV檔案或SQL檔案,並下載到本地或ECS執行個體中。

    2. 在本地或ECS執行個體中解壓下載的備份檔案。

      • 若備份檔案為.tar.gz格式:

        tar -izxvf <壓縮包檔案名稱>.tar.gz -C <解壓縮後的檔案位置>
        
        # 本樣本將名為backup.tar.gz的壓縮檔解壓縮到指定目錄/home/mysql/data中,具體請以實際檔案名稱和目錄為準
        tar -izxvf backup.tar.gz -C /home/mysql/data
      • 若備份檔案為.tar.zst格式:

        zstd -d -c <壓縮包檔案名稱>.tar.zst | tar -xvf - -C <解壓縮後的檔案位置>
        
        # 本樣本將名為backup.zst的壓縮檔解壓縮到指定目錄/home/mysql/data中,具體請以實際檔案名稱和目錄為準
        zstd -d -c backup.tar.zst | tar -xvf - -C /home/mysql/data
    3. (可選)查看備份檔案是否已解壓到指定位置(/home/mysql/data)。

      ls -al /home/mysql/data
  2. 準備恢複指令碼

    1. 自行準備恢複指令碼。

      您可以將MySQL Python指令檔下載至本地或ECS執行個體中。

      重要

      本指令碼僅供參考,您需要根據自己的使用環境做相應調整,請謹慎使用。

    2. 對指令碼執行授權命令如下。

      chmod +x ./<指令碼名稱>.py
      
      # 樣本如下
      chmod +x ./restore_from_downloads.py
  3. 執行恢複命令

    重要

    如果出現類似Command 'python' not found的報錯,說明系統中沒有安裝Python或Python命令不在系統的搜尋路徑中。此時請確認您系統中安裝的Python版本以及執行Python的命令是否正確。例如,如果系統中安裝了Python3,可以使用python3 ./restore_from_downloads.py /home/mysql/data/test1.sql 127.0.0.1 3306 zhtxxxxx "#txxxxx"

    python ./<指令碼名稱>.py <CSV檔案或SQL檔案目錄路徑> <資料庫主機> <資料庫連接埠> <資料庫帳號> <資料庫密碼>
    
    # 樣本如下
    python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********"

    image.png

相關文檔