使用mysqldump迁移rds for mysql数据-九游平台
迁移准备
云数据库rds九游平台的服务支持开启公网访问功能,通过弹性公网ip进行访问。您也可通过弹性云服务器的内网访问云数据库rds。
- 准备弹性云服务器或可通过公网访问云数据库rds。
- 通过弹性云服务器连接云数据库rds实例,需要创建一台弹性云服务器。
- 通过公网地址连接云数据库rds实例,需具备以下条件。
- 先对云数据库rds实例绑定公网地址,如何绑定公网地址,请参见绑定弹性公网ip。
- 保证本地设备可以访问云数据库rds实例绑定的公网地址。
- 在准备的弹性云服务器或可访问云数据库rds的设备上,安装mysql客户端。
请参见如何安装mysql客户端。
该弹性云服务器或可访问云数据库rds的设备需要安装和rds for mysql数据库服务端相同版本的数据库客户端,mysql数据库或客户端会自带mysqldump和mysql工具。
数据迁移到云数据库rds后可能要面对更改ip的问题,为减少客户业务更改,降低迁移难度,支持更改内网ip,具体请参见修改内网地址。
云数据库rds的系统库mysql和sys不支持导入到rds for mysql实例。
导出数据
要将源数据库迁移到云数据库rds,需要先对其进行导出。

- 相应导出工具需要与数据库引擎版本匹配。
- 数据库迁移为离线迁移,您需要停止使用源数据库的应用程序。
- 导出或导入数据时,请谨慎,避免因操作不当导致实例或业务异常。
- 登录源数据库。
- 使用mysqldump将表结构导出至sql文件。
mysql数据库是云数据库rds服务管理所必须的数据库,导出表结构时,禁止指定--all-database参数,否则会造成数据库故障。
mysqldump--databases<db_name>--single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=off-u <db_user>-p -h<db_address>-p <db_port>|sed -e 's/definer[ ]*=[ ]*[^*]*\*/\*/' -e 's/definer[ ]*=.*function/function/' -e 's/definer[ ]*=.*procedure/procedure/' -e 's/definer[ ]*=.*trigger/trigger/' -e 's/definer[ ]*=.*event/event/' >
- db_name为要迁移的数据库名称。
- db_user为数据库用户。
- db_address为数据库地址。
- db_port为数据库端口。
- backup_file为导出生成的文件名称。
根据命令提示输入数据库密码。
示例如下:
mysqldump --databases rdsdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=off -u root -p -h 192.168.151.18 -p 3306 |sed -e 's/definer[ ]*=[ ]*[^*]*\*/\*/' -e 's/definer[ ]*=.*function/function/' -e 's/definer[ ]*=.*procedure/procedure/' -e 's/definer[ ]*=.*trigger/trigger/' -e 's/definer[ ]*=.*event/event/' > dump-defs.sql
enter password:
若使用的mysqldump低于5.6版本,需要去掉“--set-gtid-purged=off”。
命令执行完会生成“dump-defs.sql”文件,如下:
[rds@localhost ~]$ ll dump-defs.sql -rw-r-----. 1 rds rds 2714 sep 21 08:23 dump-defs.sql
- 使用mysqldump将数据导出至sql文件。
mysql数据库是云数据库rds服务管理所必须的数据库,导出数据时,禁止指定--all-database参数,否则会造成数据库故障。
mysqldump --databases<db_name>--single-transaction --hex-blob --set-gtid-purged=off --no-create-info --skip-triggers-u<db_user>-p-h<db_address>-p<db_port>-r<backup_file>
以上命令的参数说明如2所示。
根据命令提示输入数据库密码。
示例如下:
mysqldump --databases rdsdb --single-transaction --hex-blob --set-gtid-purged=off --no-create-info --skip-triggers -u root -p -h 192.168.151.18 -p 3306 -r dump-data.sql
若使用的mysqldump低于5.6版本,需要去掉“--set-gtid-purged=off”。
命令执行完会生成“dump-data.sql”文件,如下:
[rds@localhost ~]$ ll dump-data.sql -rw-r-----. 1 rds rds 2714 sep 21 08:23 dump-data.sql
导入数据
通过弹性云服务器或可访问云数据库rds的设备,用相应客户端连接云数据库rds实例,将导出的sql文件导入到云数据库rds。

如果源数据库中包含触发器、存储过程、函数或事件调用,则需确保导入前设置目标数据库参数log_bin_trust_function_creators=on。
- 登录已准备的弹性云服务器,或可访问云数据库rds的设备。
- 客户端连接云数据库rds实例。
- 导入表结构到云数据库rds。
# mysql -f -h
-p<db_port>-uroot-p < /dump-defs.sql - rds_address为云数据库rds实例的ip地址。
- db_port为当前数据库实例的端口。
- backup_dir为“dump-defs.sql”所在目录。
示例如下:
# mysql -f -h 172.16.66.198 -p 3306 -u root -p < dump-defs.sql
enter password:
如果是将单表导出的数据(即导出的sql是某一张表的sql语句,不包含数据库)再进行导入,建议指定待导入的数据库(mydb),否则可能会报错“no database selected”。示例:
# mysql -f -h 172.16.66.198 -p 3306 -u root -p mydb < dump-defs.sql
enter password:
- 导入数据到云数据库rds。
# mysql -f -h
-p<db_port>-uroot-p< /dump-data.sql - rds_address为云数据库rds实例的ip地址。
- db_port为当前数据库实例的端口。
- backup_dir为“dump-data.sql”所在目录。
示例如下:
# mysql -f -h 172.16.66.198 -p 3306 -u root -p < dump-data.sql
enter password:
如果是将单表导出的数据(即导出的sql是某一张表的sql语句,不包含数据库)再进行导入,建议指定待导入的数据库(mydb),否则可能会报错“no database selected”。示例:
# mysql -f -h 172.16.66.198 -p 3306 -u root -p mydb < dump-defs.sql
enter password:
- 查看迁移结果。
mysql> show databases;
示例中,名为rdsdb的数据库已经被导入了:
mysql> show databases; -------------------- | database | -------------------- | information_schema | | rdsdb | | mysql | | performance_schema | sys -------------------- 4 rows in set (0.00 sec)
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨