當您需要將資料量較小或者允許較長停機時間的自建MySQL遷移至RDS MySQL時,可以使用mysqldump工具輕鬆實現資料移轉。該工具可以將自建資料庫的結構和資料匯出到一個包含建立和插入資料SQL語句的文字檔中,從而確保資料的完整性和一致性。
前提條件
RDS執行個體設定白名單、申請外網地址及建立資料庫和帳號的操作請參見快速入門。
背景資訊
由於RDS提供的關係型資料庫服務與原生的資料庫服務完全相容,所以對使用者來說,將原有資料庫遷移到RDS執行個體的過程與從一台MySQL伺服器遷移到另一台MySQL伺服器的過程基本類似。
適用情境
自建MySQL資料庫遷移至RDS MySQL執行個體內。
注意事項
預設情況下,自建庫遷移到RDS以後表名統一變為小寫。您可以通過如下兩種方法讓RDS MySQL執行個體區分表名大小寫。
操作步驟
本文以Linux系統為例。在macOS的終端或者Windows的命令提示字元下也可執行mysqldump命令。
使用mysqldump匯出自建資料庫的資料、預存程序、觸發器和函數。
在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匯出RDS MySQL資料庫的資料,請將命令中的串連地址、帳號、密碼及資料庫名替換為RDS MySQL執行個體的資訊。
樣本
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
在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
說明
若資料庫中沒有使用預存程序、觸發器和函數,可跳過此步驟。
將匯出的兩個檔案上傳到ECS執行個體上,本例路徑為/tmp。
說明
如果自建資料庫原本就在ECS執行個體上,可跳過本步驟。

將匯出的檔案匯入到目標RDS中,命令如下:
mysql -h <RDS執行個體串連地址> -P <RDS執行個體連接埠> -u <RDS執行個體帳號> -p <RDS資料庫名稱> < /tmp/<自建資料庫名>.sql
mysql -h <RDS執行個體串連地址> -P <RDS執行個體連接埠> -u <RDS執行個體帳號> -p <RDS資料庫名稱> < /tmp/<自建資料庫名>Trigger.sql
樣本
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
匯入成功後通過DMS登入RDS資料庫查看資料是否正常。