`

mysql 双向同步的键值冲突问题的解决方法

阅读更多
多主互备和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以设计到自增长重复问题
出现的问题(多主自增长ID重复) 
1:首先我们同步A,B的test表结构 
2:停掉A,在B上对数据表test(存在自增长ID)执行插入操作,返回插入ID为1 
3:后停掉B,在A上对数据表test(存在自增长ID)执行插入操作,返回的插入ID也是1 
4:然后 我们同时启动A,B,就会出现主键ID重复 

解决方法: 
我们只要保证两台服务器上插入的自增长数据不同就可以了 
如:A查奇数ID,B插偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了 

在这里我们在A,B上加入参数,以实现奇偶插入 

A:my.cnf上加入参数 
auto_increment_offset = 1 
auto_increment_increment = 2 
这样A的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID了 

B:my.cnf上加入参数 
auto_increment_offset = 2 
auto_increment_increment = 2 
这样B的auto_increment字段产生的数值是:2, 4, 6, 8, …等偶数ID了 

可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3台,4台,或者N台服务器,只要保证auto_increment_increment = N 再设置一下auto_increment_offset为适当的初始值就可以了,那样,我们的MySQL可以同时有几十台主服务器,而不会出现自增长ID 重复。
分享到:
评论

相关推荐

    mysql 双向同步的键值冲突问题的解决方法分享

    总结来说,解决MySQL双向同步中的键值冲突,特别是自增ID冲突,主要依赖于合理配置`auto_increment_offset` 和 `auto_increment_increment` 参数。通过设置不同的初始偏移和相同的步长,可以确保每个服务器生成唯一...

    后端开发基础知识整理JAVA、JVM、操作系统、网络、设计模式、mysql、redis、多线程、spring、springboo

    - **生产者消费者问题、哲学家就餐问题、读者写者问题**:经典的同步问题示例。 - **死锁的条件、排查、避免**:互斥条件、请求与保持条件、不剥夺条件、循环等待条件等。 - **互斥锁、自旋锁、读写锁、悲观锁、乐观...

    数据库面试基础知识.docx

    11. **MySQL Sleep 线程过多如何解决** - 优化查询性能,减少不必要的等待。 - 调整配置参数,如 innodb_lock_wait_timeout。 12. **Sort_buffer_size 参数作用** - 用于控制排序缓冲区的大小。 13. **如何在线...

    史上最全的Java面试题集锦.pdf

    HashMap的扩容、红黑树转换(当元素达到8个时,链表转红黑树)、最小树化容量(4个元素时,树化不再进行)、哈希冲突解决策略(开放寻址法或链地址法)等都是常见问题。面试官可能会询问为何选择红黑树而非其他类型...

    JAVA面试使用的笔试题目

    使用哈希表存储键值对,通过键的hashCode()计算桶位置,解决冲突使用链地址法。 23. **HashSet的实现原理**: 基于HashMap实现,每个元素作为键,值为null。 24. **ArrayList与LinkedList的区别**: ArrayList...

    CouchDB权威指南

    - **复制机制**:CouchDB支持双向同步,可以在多个服务器之间复制数据,提供高可用性和容错性。 2. **CouchDB设计哲学** - **面向文档**:CouchDB强调以文档为中心的设计,适合处理结构化和半结构化的数据。 - *...

    Java后端面试题大纲(涵盖了百分之九十的考点).pdf

    - `LinkedList`基于双向链表实现,不支持随机访问,但插入和删除操作效率较高。 19. **List遍历删除元素** - 使用迭代器`Iterator`来遍历并删除元素,可以避免`ConcurrentModificationException`异常。 - `fail-...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **同步性**:`HashTable`中方法是同步的,而`HashMap`不是。 - **初始容量大小**:`HashMap`默认初始容量为16,而`HashTable`默认初始容量为11。 - **扩容方式**:`HashMap`的扩容是在原有基础上翻倍再加1;`...

    (2024)跳槽涨薪必备精选面试题.pdf

    - 解决类路径冲突问题。 - 提高安全性,避免不同应用间类的相互干扰。 6. **Tomcat如何进行优化?** - 调整 JVM 参数。 - 使用连接池管理数据库连接。 - 启用缓存机制。 - 优化代码逻辑。 ### 五、Web技术 ...

    Java笔试面试题解答

    - **Vector**: 同ArrayList,但所有方法都是同步的,适用于多线程环境。 **3. `java.util.HashMap`的用途及实现原理** - **用途**: 存储键值对,提供快速的查找功能。 - **实现原理**: 使用哈希算法将键映射到桶...

    hibenater笔记.pdf

    - MySQL JDBC驱动(例如mysql-connector-java-x.x.xx.jar) 3. **创建Hibernate配置文件**:在项目的src目录下创建`hibernate.cfg.xml`文件,并且为了方便调试,通常还会加入log4j的日志配置文件。 4. **定义实体...

Global site tag (gtag.js) - Google Analytics