問題現象
分別在主從節點上使用同樣的自增主索引值(自增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;