全部產品
Search
文件中心

ApsaraDB RDS:使用mysqldump遷移MySQL資料

更新時間:Jun 19, 2024

當您需要將資料量較小或者允許較長停機時間的自建MySQL遷移至RDS MySQL時,可以使用mysqldump工具輕鬆實現資料移轉。該工具可以將自建資料庫的結構和資料匯出到一個包含建立和插入資料SQL語句的文字檔中,從而確保資料的完整性和一致性。

前提條件

RDS執行個體設定白名單、申請外網地址,以及建立資料庫和帳號。具體操作,請參見快速入門

背景資訊

由於RDS提供的關係型資料庫服務與原生的資料庫服務完全相容,所以對使用者來說,將原有資料庫遷移到RDS執行個體的過程與從一台MySQL伺服器遷移到另外一台MySQL伺服器的過程基本類似。

說明

適用情境

自建MySQL資料庫遷移至RDS MySQL執行個體內。

注意事項

預設情況下,自建庫遷移到RDS以後表名統一變為小寫。您可以通過如下兩種方法讓RDS MySQL執行個體區分表名大小寫。

  • 在建立RDS MySQL執行個體時將表名大小寫設定為區分大小寫。更多資訊,請參見建立RDS MySQL執行個體

  • 已經建立好的執行個體,可以在參數設定中將lower_case_table_names參數值設定為0以區分表名大小寫。更多資訊,請參見設定執行個體參數

    警告
    • lower_case_table_names參數設定為0後,務必不要再次設定為1,否則可能導致ERROR 1146 (42S02): Table doesn't exist錯誤,對業務造成嚴重影響。

    • RDS MySQL 8.0版本執行個體暫不支援修改該參數,請在建立執行個體時進行設定。

操作步驟

本文以Linux系統為例。在macOS的終端或者Windows的命令提示字元下也可執行mysqldump命令。

  1. 使用mysqldump匯出自建資料庫的資料、預存程序、觸發器和函數。

    重要
    • 匯出期間請勿進行資料更新,耐心等待匯出完成。

    • 下文中的user使用者需要具備本文介紹的操作的相關許可權。使用權限設定的詳細操作,請參見使用權限設定

    1. 在Linux命令列下匯出自建資料庫的資料,命令如下:

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

      樣本

      mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob testdb --skip-triggers --skip-lock-tables > /tmp/testdb.sql
    2. 在Linux命令列下匯出預存程序、觸發器和函數,命令如下:

      mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <自建資料庫名> -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/<自建資料庫名>Trigger.sql

      樣本

      mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob testdb -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/testdbTrigger.sql
      說明

      若資料庫中沒有使用預存程序、觸發器和函數,可跳過此步驟。

  2. 將匯出的兩個檔案上傳到ECS執行個體上,本例路徑為/tmp

    說明

    如果自建資料庫原本就在ECS執行個體上,可跳過本步驟。

    result

  3. 將匯出的檔案匯入到目標RDS中,命令如下:

    mysql -h <RDS執行個體串連地址> -P <RDS執行個體連接埠> -u <RDS執行個體帳號> -p <RDS資料庫名稱> < /tmp/<自建資料庫名>.sql
    mysql -h <RDS執行個體串連地址> -P <RDS執行個體連接埠> -u <RDS執行個體帳號> -p <RDS資料庫名稱> < /tmp/<自建資料庫名>Trigger.sql
    說明
    • RDS資料庫名稱需要是RDS執行個體上已建立的資料庫。建立資料庫操作,請參見管理資料庫

    • RDS執行個體帳號需要是高許可權帳號或具有讀寫權限的帳號。

    樣本

    mysql -h rm-bpxxxxx.mysql.rds.aliyuncs.com -P 3306 -u testuser -p testdb  < /tmp/testdb.sql
    mysql -h rm-bpxxxxx.mysql.rds.aliyuncs.com -P 3306 -u testuser -p testdb  < /tmp/testdbTrigger.sql
  4. 匯入成功後登入RDS執行個體資料庫中查看資料是否正常。具體操作,請參見通過DMS登入RDS資料庫