迁移准备
关系型数据库服务支持开启公网访问功能,通过弹性公网IP进行访问。您也可通过弹性云主机的内网访问关系型数据库。
1.准备弹性云主机或可通过公网访问关系型数据库。
- 通过弹性云主机连接关系型数据库实例,需要创建一台弹性云主机。
- 通过公网地址连接关系型数据库实例,需具备以下条件。
- 先对关系型数据库实例绑定公网地址。
- 保证本地设备可以访问关系型数据库实例绑定的公网地址。
2.在准备的弹性云主机或可访问关系型数据库的设备上,安装MySQL客户端。
说明该弹性云主机或可访问关系型数据库的设备需要安装和RDS for MySQL数据库服务端相同版本的数据库客户端,MySQL数据库或客户端会自带mysqldump和mysql工具。
数据迁移到云数据库RDS后可能要面对更改IP的问题,为减少客户业务更改,降低迁移难度,支持更改内网IP。
云数据库RDS的系统库mysql和sys不支持导入到RDS for MySQL实例。
导出数据
要将源数据库迁移到关系型数据库,需要先对其进行导出。
说明相应导出工具需要与数据库引擎版本匹配。
数据库迁移为离线迁移,您需要停止使用源数据库的应用程序。
步骤 1 登录已准备的弹性云主机,或可访问关系型数据库的设备。
步骤 2 使用mysqldump将表结构导出至SQL文件。
说明mysql数据库是关系型数据库服务管理所必须的数据库,导出表结构时,禁止指定--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/' > <BACKUP_FILE>
- 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
步骤 3 使用mysqldump将数据导出至SQL文件。
说明mysql数据库是关系型数据库服务管理所必须的数据库,导出数据时,禁止指定--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 8635 -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
导入数据
通过弹性云主机或可访问关系型数据库的设备,用相应客户端连接关系型数据库实例,将导出的SQL文件导入到关系型数据库。
说明如果源数据库中包含触发器、存储过程、函数或事件调用,则需确保导入前设置目标数据库参数log_bin_trust_function_creators=ON。
步骤 1 登录已准备的弹性云主机,或可访问关系型数据库的设备。
步骤 2 导入表结构到关系型数据库。
#mysql -f -h <RDS_ADDRESS> -P < DB_PORT >-uroot -p < <BACKUP_DIR> /dump-defs.sql
- RDS_ADDRESS为关系型数据库实例的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:
步骤 3 导入数据到关系型数据库。
mysql -f -h <RDS_ADDRESS> -P < DB_PORT >-uroot -p< <BACKUP_DIR> /dump-data.sql
- RDS_ADDRESS为关系型数据库实例的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:
步骤 4 查看迁移结果。
mysql> show databases;
示例中,名为rdsdb的数据库已经被导入了:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| rdsdb |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)