用户需求
- 数据迁移
- DMS无法迁移视图,触发器等情况下使用手动迁移
1.创建临时EC2
- 在目标数据库Region创建临时EC2用于导出数据
2.安装mysqldump
- yum -y install mysql
3.导出数据
- mysqldump导出语句参考
mysqldump -h rds地址 -u 用户名 -p 密码 --single-transaction --routines --triggers --databases 导出数据库名称 --set-gtid-purged=OFF --add-drop-database --compress --port 3306 > a.sql
参数 | 说明 |
---|---|
--single-transaction | 从服务器转储数据之前发出BEGIN SQL语句,保持数据一致性 |
--routines | 导出存储过程和函数 |
--triggers | 导出表的触发器 |
--set-gtid-purged | 是否将SET @@ GLOBAL.GTID_PURGED添加到输出 |
--add-drop-database | 在每个CREATE DATABASE语句之前添加DROP DATABASE语句 |
--compress | 压缩客户端和服务器之间发送的所有信息 |
4.导入数据
- RDS导入前提
- 目标数据库用户名必须与源数据库用户名保持一致
- 解决方法
- 使用sed命令将sql文件中的源数据库用户名替换成目标数据库的用户名
mysql -h 数据库地址 -u 用户名 -p 密码 < a.sql
5.导入错误处理
- 描述
当数据库已启用二进制日志并且 mysqldump 文件包含对象(触发器、视图、函数或事件)时,会出现此错误。有关更多信息,请参阅 MySQL 文档中的二进制日志
- 错误信息
Error: 1227 SQLSTATE: 42000 (ER_SPECIFIC_ACCESS_DENIED_ERROR) Access denied; you need (at least one of) the %s privilege(s) for this operation
- 解决方法
要解决错误 1227,请将 log_bin_trust_function_creators 的参数组值更改为 1
- 变更方法
- 相关链接
参考文档:
- https://aws.amazon.com/cn/premiumsupport/knowledge-center/mysqldump-error-rds-mysql-mariadb/
- https://aws.amazon.com/cn/premiumsupport/knowledge-center/error-1227-mysqldump/
- https://aws.amazon.com/cn/premiumsupport/knowledge-center/definer-error-mysqldump/
- https://console.aws.amazon.com/support/home?region=ap-southeast-1#/case/?displayId=7015184741&language=en