前期準備
- 準備能夠遠程連接關系數據庫MySQL的機器。
- 通過彈性云主機連接關系數據庫MySQL,需要創建一臺彈性云主機。
- 通過公網地址連接關系數據庫MySQL,需要將關系數據庫MySQL綁定公網地址。
- 關系數據庫MySQL實例設置白名單。
- 在準備的彈性云主機或其他可訪問關系數據庫MySQL的設備上,安裝MySQL客戶端。
- 創建關系數據庫MySQL賬號。
說明彈性云主機或可訪問關系數據庫MySQL的設備需要安裝和關系數據庫MySQL相同版本的數據庫客戶端。(如果不相同則只能夠向后兼容,例如用5.7版本的mysqldump來導出5.5版本的數據庫數據)
適用場景
- mysqldump遷移復雜,且需要停止源數據庫的應用程序,建議數據量小的場景下使用。
- 數據量大的場景下建議優先使用DTS遷移數據。
導出數據
需要先對源數據庫進行導出,才能將其遷移到關系數據庫MySQL。
- 登錄源數據庫。
- 使用mysqldump導出自建數據庫的表結構和數據,命令如下:
說明
數據庫遷移為離線遷移,您需要停止使用源數據庫的應用程序。
下文中的自建數據庫用戶需要具備相關的操作權限。
若使用的mysqldump低于5.6版本,需要去掉“--set-gtid-purged=OFF”。
mysqldump -h <自建數據庫地址> -u <自建數據庫用戶> -p -P<端口> --databases <自建數據庫> --opt --default-character-set=utf8 --hex-blob --single-transaction --set-gtid-purged=OFF --skip-triggers --skip-events --skip-routines > /tmp/<自建數據庫名>_data.sql
示例:
mysqldump -h xxx -u root -p -P<端口> --databases test --opt --default-character-set=utf8 --hex-blob --single-transaction --set-gtid-purged=OFF --skip-triggers --skip-events --skip-routines > /tmp/test_data.sql
- 使用mysqldump導出自建數據庫的觸發器、事件、存儲過程和函數,命令如下:
說明如果源數據庫中沒有使用觸發器、事件、存儲過程和函數,可跳過此步驟。
mysqldump -h <自建數據庫地址> -u <自建數據庫用戶> -p -P<端口> --database <自建數據庫> --opt --default-character-set=utf8 --hex-blob --single-transaction --set-gtid-purged=OFF --no-create-info --no-data --routines --events | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' > /tmp/<自建數據庫名>_trigger.sql
示例:
mysqldump -h xxx -u root -p -P<端口> --databases test --opt --default-character-set=utf8 --hex-blob --single-transaction --set-gtid-purged=OFF --no-create-info --no-data --routines --events | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' > /tmp/test_trigger.sql
導入數據
使用適當的客戶端,通過可連接關系數據庫MySQL的設備,將上一步中導出的SQL文件導入到關系數據庫MySQL的設備中,本例導出的SQL文件路徑為/tmp。
說明如果源數據庫包含觸發器、存儲過程、函數或事件,則需要設置目標數據庫參數log_bin_trust_function_creators=ON。
- 登錄已準備的彈性云主機,或可訪問關系數據庫MySQL的設備。
- 客戶端連接關系數據庫MySQL實例,將導出的兩個文件上傳到實例上。
- 導入數據到關系數據庫MySQL,命令如下:
mysql -h <關系數據庫MySQL實例地址> -P <關系數據庫MySQL實例端口號> -u<關系數據庫MySQL實例賬號> -p < /tmp/<自建數據庫>_data.sql
mysql -h <關系數據庫MySQL實例地址> -P <關系數據庫MySQL實例端口號> -u<關系數據庫MySQL實例賬號> -p < /tmp/<自建數據庫>_trigger.sql
示例:
mysql -h xxx -P xxx -uroot -p < /tmp/test_data.sql
mysql -h xxx -P xxx -uroot -p < /tmp/test_trigger.sql
- 導入成功后,登錄關系數據庫MySQL中查看數據是否正常。
常見問題
-
Q:ERROR 1273 (HY000) at line xx: Unknown collation: 'utf8mb4_0900_ai_ci'報錯怎么解決?
A:可能是源數據庫使用了與目標數據庫不兼容的字符集,將utf8mb4_unicode_ci替換為utf8_general_ci、utf8mb4替換為utf8即可。
-
Q:ERROR 1046 (3D000) at line xx: No database selected報錯怎么解決?
A:可能是將單表導出的數據再進行導入,建議指定待導入的數據庫(test_db),示例: mysql -h xxx -P xxx -uroot -p test_db < /tmp/test_data.sql。