使用mysqldump将数据迁移至GaussDB(for MySQL)
本章节主要介绍使用mysqldump工具将数据迁移至GaussDB(for MySQL)的步骤。
注意事项
数据库迁移为离线迁移,您需要停止使用源数据库的应用程序。
迁移前准备
- 准备弹性云服务器或可通过公网访问GaussDB(for MySQL)的设备。
- 在准备的弹性云服务器或可访问GaussDB(for MySQL)的设备上,安装MySQL客户端。
- 如果弹性云服务器或可访问GaussDB(for MySQL)的设备上未安装MySQL客户端,请参考如何安装MySQL客户端进行安装。
- 该弹性云服务器或可访问GaussDB(for MySQL)数据库的设备需要安装和GaussDB(for MySQL)数据库服务端相同版本或更高版本的数据库客户端,MySQL数据库或客户端会自带mysqldump和mysql工具。
导出数据
要将源数据库迁移到GaussDB(for MySQL)数据库,需要先将源数据库的数据进行导出。
mysqldump导出工具需要与数据库引擎版本匹配。
- 登录已准备的弹性云服务器,或可访问GaussDB(for MySQL)数据库的设备。
- 使用mysqldump将元数据导出至SQL文件。
MySQL数据库是GaussDB(for 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 gaussdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u root -p -h 192.*.*.* -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:
命令执行完会生成“dump-defs.sql”文件。
- 使用mysqldump将数据导出至SQL文件。
MySQL数据库是GaussDB(for 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 gaussdb --single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers -u root -p -h 192.*.*.* -P 3306 -r dump-data.sql
命令执行完会生成“dump-data.sql”文件。
导入数据
通过弹性云服务器或可访问GaussDB(for MySQL)数据库的设备,用相应客户端连接GaussDB(for MySQL)数据库实例,将导出的SQL文件导入到GaussDB(for MySQL)数据库。
如果源数据库中包含触发器、存储过程、函数或事件调用,则需确保导入前设置目标数据库参数log_bin_trust_function_creators=ON。
- 导入元数据到GaussDB(for MySQL)数据库。
mysql -f -h <DB_ADDRESS> -P <DB_PORT> -u root -p < <BACKUP_DIR>/dump-defs.sql
- <DB_ADDRESS>为GaussDB(for MySQL)数据库实例的IP地址。
- <DB_PORT>为当前数据库实例的端口。
- <BACKUP_DIR>为“dump-defs.sql”所在目录。
示例如下:
mysql -f -h 172.*.*.* -P 3306 -u root -p < dump-defs.sql
Enter password:
- 导入数据到GaussDB(for MySQL)数据库。
mysql -f -h <DB_ADDRESS> -P <DB_PORT> -u root -p < <BACKUP_DIR>/dump-data.sql
- <DB_ADDRESS>为GaussDB(for MySQL)数据库实例的IP地址。
- <DB_PORT>为当前数据库实例的端口。
- <BACKUP_DIR>为“dump-data.sql”所在目录。
示例如下:
mysql -f -h 172.*.*.* -P 3306 -u root -p < dump-data.sql
Enter password:
- 使用MySQL工具连接GaussDB(for MySQL)数据库实例,查看迁移结果。
mysql> show databases;
示例中,名为my_db的数据库已经被导入了:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | my_db | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec)