AWS DMS迁移RDS MySQL时系统表迁移失败提示pending validation问题
AWS DMS迁移RDS MySQL系统库表报错排查解决方法
1. 先确认系统库迁移必要性
performance_schema是MySQL内置的运行时性能统计库,所有数据都是实例运行时动态生成的,完全不需要迁移,强制迁移也会因为源目标实例运行状态不一致触发报错。mysql库是MySQL的核心系统元数据库,你遇到报错的user、proc、event存储的是账号权限、存储过程、定时事件这类特殊元数据,DMS默认不支持直接迁移这类系统表,没有特殊需求不要全库迁移mysql库。
2. 调整DMS任务映射规则排除系统表
你可以直接修改DMS任务的转换规则,添加排除规则过滤报错的系统表,无需修改其他配置:
- 排除整个
performance_schema库:匹配规则选择「schema name」,运算符选「equals」,值填performance_schema,动作设置为exclude - 排除
mysql库下的报错系统表:匹配规则选择「schema name」等于mysql,再添加表名匹配规则,分别匹配event、user、proc三张表,动作设置为exclude
如果你确实在
mysql库下存了自定义业务表,只需要排除上述报错的系统表即可,不需要全库排除mysql。
3. 手动迁移需要的系统元数据
如果你确实需要迁移账号、存储过程、事件这类元数据,不要用DMS迁移,用mysqldump工具单独处理:
- 迁移用户权限:在源RDS实例执行命令导出用户数据
mysqldump -u [你的账号] -p --no-data --databases mysql --tables user > user_backup.sql,导出后删掉目标实例已经存在的系统账号(比如rdsadmin、默认root账号),再导入到目标RDS实例 - 迁移存储过程:执行命令导出
mysqldump -u [你的账号] -p --routines --no-create-info --no-data --no-create-db --skip-opt [你的业务库名] > routines_backup.sql,导入目标实例即可 - 迁移定时事件:执行命令导出
mysqldump -u [你的账号] -p --events --no-data --no-create-info [你的业务库名] > events_backup.sql,导入目标实例即可
4. 重启DMS任务重新验证
修改完映射规则后,重启DMS任务,等全量同步完成后重新触发验证,pending validation报错就会自动消失。
可选排查项
如果调整规则后仍有报错,可以检查两个配置:
- 确认DMS使用的源端和目标端账号权限符合要求:源端需要
SELECT、REPLICATION CLIENT、REPLICATION SLAVE权限,目标端需要ALTER、CREATE、DROP、INSERT、UPDATE、DELETE权限 - 确认目标端RDS参数组配置和源端兼容,
log_bin、binlog_format等参数符合DMS迁移要求
内容的提问来源于stack exchange,提问作者Prime
相关产品推荐
相关产品推荐

