一、背景
今天突然看到一个朋友遇到了这个表产生的主键冲突的问题,如果了解这个表的原理其实很容易知道原因
二、原因
这个引擎的表只在本地存储表结构,数据是在远端存储,增删改也是在远端操作,此时主从表结构一致,都是这种引擎,那么就好理解了。
角色 | ip | 表 | 主键数据 |
---|---|---|---|
远端数据源 | 192.168.1.1 | a | (1,2) |
主 | 192.168.1.2 | a | (1,2) |
从 | 192.168.1.3 | a | (1,2) |
操作步骤:
- 主从同步过滤a表
- 向主库插入3这条数据
- 查看三个节点a表对的数据,这时候会发现数据都变成了1,2,3,这是因为插入的真实操作实在192.168.1.1上执行的,而主从表的数据都是读取该表的数据,所以主从表的数据都变了
- 将过滤a表的操作取消,会发现二进制中记录了a表的增删改,那么这个操作在从库应用的时候又会造成在远端执行一遍,所以会主键冲突
三、总结
这种引擎基本没见人用过,不过要确实需要的话,可以在主从同步中过滤该表来避免错误
官网链接
https://dev.mysql.com/doc/refman/5.7/en/create-table.html
https://dev.mysql.com/doc/refman/5.7/en/federated-usagenotes.html