华为云云数据库rds使用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 |
+--------------------+
4 rows in set (0.00 sec)

父主题: 数据库迁移

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家