本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
當您需要將數據量較小或者允許較長停機時間的自建MySQL遷移至RDS MySQL時,可以使用mysqldump工具輕松實現數據遷移。該工具可以將自建數據庫的結構和數據導出到一個包含創建和插入數據SQL語句的文本文件中,從而確保數據的完整性和一致性。
前提條件
RDS實例設置白名單、申請外網地址,以及創建數據庫和賬號。具體操作,請參見快速入門。
背景信息
由于RDS提供的關系型數據庫服務與原生的數據庫服務完全兼容,所以對用戶來說,將原有數據庫遷移到RDS實例的過程與從一臺MySQL服務器遷移到另外一臺MySQL服務器的過程基本類似。
適用場景
自建MySQL數據庫遷移至RDS MySQL或RDS MySQL Serverless實例內。
注意事項
默認情況下,自建庫遷移到RDS以后表名統一變為小寫。您可以通過如下兩種方法讓RDS MySQL或RDS MySQL Serverless實例區分表名大小寫。
在創建RDS MySQL或RDS MySQL Serverless實例時將表名大小寫設置為區分大小寫。更多信息,請參見創建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命令。
使用mysqldump導出自建數據庫的數據、存儲過程、觸發器和函數。
重要導出期間請勿進行數據更新,耐心等待導出完成。
下文中的user用戶需要具備本文介紹的操作的相關權限。權限設置的詳細操作,請參見權限設置。
在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
在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
說明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
導入成功后登錄RDS實例數據庫中查看數據是否正常。具體操作,請參見通過DMS登錄RDS數據庫。
常見問題
Q:
OPERATION need to be executed set by ADMIN
報錯怎么解決?A:可能是SQL腳本里面包括視圖,觸發器,存儲過程等對象的definer問題,或者含有set global類SQL導致。詳情請參見RDS MySQL出現“OPERATION need to be executed set by ADMIN”報錯。
Q:
Access denied; you need (at least one of) the SUPER privilege(s) for this operation
報錯怎么解決?A:SQL腳本里面包括SUPER權限的語句,將相關語句刪除再執行。