导入SQL至MySQL组复制集群报缺主键但表实际存在主键如何解决
问题场景
将WordPress站点对应的MySQL数据库迁移至运行主主复制的MySQL集群时,执行SQL文件导入操作收到如下报错:
Plugin group_replication reported: 'Table wpmk_actionscheduler_actions does not have any PRIMARY KEY. This is not compatible with Group Replication.'
已完成排查
- 经phpMyAdmin检查源库中
wpmk_actionscheduler_actions表,确认已配置主键 - 在源库执行如下SQL查询所有未设置主键的业务基表,查询无返回结果,确认源库所有业务表均已配置主键:
SELECT tab.table_schema AS database_name, tab.table_name AS table_name, tab.table_rows AS table_rows FROM information_schema.tables tab LEFT JOIN information_schema.table_constraints tco ON (tab.table_schema = tco.table_schema AND tab.table_name = tco.table_name AND tco.constraint_type = 'PRIMARY KEY') WHERE tab.table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') AND tco.constraint_type IS NULL AND tab.table_type = 'BASE TABLE';
- 源库导出前该表的主键配置截图如下:

当前导入过程中集群持续抛出表缺失主键错误,排查停滞。
故障原因
该报错是MySQL Group Replication(组复制,即主主复制的底层组件)的校验机制触发,和源库是否存在主键无直接关联,核心原因有两类:
- 导出的SQL文件中,
wpmk_actionscheduler_actions表的主键定义没有内嵌在CREATE TABLE语句中,而是在建表完成后通过单独的ALTER TABLE ... ADD PRIMARY KEY语句追加。MGR会在CREATE TABLE执行完成的瞬间校验表结构,此时表还未追加主键,会直接触发报错终止导入,哪怕后续语句马上就会添加主键也不会继续执行。 - 导出的SQL文件中,该表主键的组成字段丢失了
NOT NULL约束。MGR仅识别显式非空字段组成的有效主键,若主键字段允许为空,哪怕定义了主键约束,MGR也会判定为无有效主键。
解决方法
按优先级依次尝试以下方案:
- 打开待导入的SQL文件,搜索
wpmk_actionscheduler_actions对应的建表语句段,检查主键定义位置:- 如果主键是建表后单独的ALTER语句,直接将主键定义剪切到
CREATE TABLE语句的字段列表末尾,和建表语句合并执行即可 - 如果主键已经在建表语句内,检查主键关联的所有字段,确认每个字段都带有
NOT NULL属性,缺失的直接补上
- 如果主键是建表后单独的ALTER语句,直接将主键定义剪切到
- 如果调整SQL文件后仍报错,可先在待导入的集群节点上临时关闭组复制插件,单节点完成全量SQL导入,执行以下语句确认目标库所有表都存在有效主键后,再重新启动组复制插件,让集群自动同步增量数据即可:
-- 导入完成后执行主键校验 SELECT tab.table_schema AS database_name, tab.table_name AS table_name FROM information_schema.tables tab LEFT JOIN information_schema.table_constraints tco ON (tab.table_schema = tco.table_schema AND tab.table_name = tco.table_name AND tco.constraint_type = 'PRIMARY KEY') WHERE tab.table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') AND tco.constraint_type IS NULL AND tab.table_type = 'BASE TABLE';
内容的提问来源于stack exchange,提问作者Rylad
相关产品推荐
相关产品推荐

