Aurora MySQL 8执行TRUNCATE/建表时出现tablespaces主键重复错误求助
问题解析与修复方案
为什么会出现这个错误?
这是AWS Aurora MySQL 8内部的InnoDB元数据管理表(并非你能看到的information_schema.TABLESPACES)在快照恢复后出现了主键序列异常:
- Aurora的存储架构和原生MySQL有差异,内部会维护专用的系统表来管理表空间元数据。从MySQL 5.7迁移并通过快照恢复实例后,这个内部表的自增主键计数器没有和实际已使用的主键值同步。
- 当你执行建表、
TRUNCATE TABLE <table_name>;这类会触发表空间元数据写入的操作时,系统尝试插入的主键ID已经存在,就会抛出SQL Error [1062] [23000]: Duplicate entry '1' for key 'tablespaces.PRIMARY'错误;重试时自增计数器自动递增,所以错误里的数字会跟着变大。 - 源主库能正常操作,是因为它的内部元数据序列是正常维护的,没有快照恢复带来的异常。
修复方法
- 改用逻辑迁移:放弃快照恢复的方式,创建全新的Aurora MySQL 8实例,用逻辑迁移工具(比如
mysqldump、mydumper)将MySQL 5.7的数据导出后导入新实例。这种方式能完全避免快照恢复导致的内部元数据错乱。 - 尝试重启实例:部分情况下,重启Aurora实例会触发内部元数据的校验与修复,解决主键序列不一致的问题。
- 联系AWS支持:如果重启无效,直接联系AWS技术支持,他们可以通过后台操作修复内部系统表的主键序列异常——因为这类内部表用户无法直接修改。
- 测试环境验证:如果是测试环境,先创建一个全新的Aurora MySQL 8实例,不使用快照,导入少量测试数据后执行
TRUNCATE TABLE或建表操作,确认是否能正常运行,以此排除迁移流程的问题。
内容的提问来源于stack exchange,提问作者kant312
相关产品推荐
相关产品推荐

