前期准备
- 准备能够远程连接关系数据库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 --database <自建数据库> --opt --default-character-set=utf8 --hex-blob --single-transaction --set-gtid-purged=OFF --skip-triggers --skip-events --no-create-routines > /tmp/<自建数据库名>_data.sql
示例:
mysqldump -h xxx -u root -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 --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 --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。