问题现象
分别在主从节点上使用同样的自增主键值(自增ID)进行查询,查询结果中的数据不一致。
可能原因
当为无主键表添加自增主键时,自增主键的值是按照数据在表中的排列顺序赋值的。在没有主键的情况下,数据在表中的顺序是由存储引擎内部的RowID决定的,同样的数据在主从节点上的RowID可能不同,因此无主键表中的数据在主从节点中的排列顺序不同,从而导致同样的数据对应的自增主键值不同,即用相同的自增主键值分别在主从节点上查询出的数据不同。详情请参见BUG#92949和MySQL官方文档。
解决方案
您可以执行如下步骤,解决主从节点查询数据不一致的问题:
在主节点创建一个与原无主键表相同的新表,并添加自增主键。
将数据按全部字段排序后插入到新表中。
删除原无主键表,将新表重命名为原无主键表名。
代码示例如下:
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ADD id INT AUTO_INCREMENT PRIMARY KEY;
INSERT INTO t2 SELECT * FROM t1 ORDER BY col1, col2;
DROP TABLE t1;
RENAME TABLE t2 TO t1;
文档内容是否对您有帮助?