多主互备和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以设计到自增长重复问题
出现的问题(多主自增长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 重复。
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双向同步中的键值冲突,特别是自增ID冲突,主要依赖于合理配置`auto_increment_offset` 和 `auto_increment_increment` 参数。通过设置不同的初始偏移和相同的步长,可以确保每个服务器生成唯一...
- **生产者消费者问题、哲学家就餐问题、读者写者问题**:经典的同步问题示例。 - **死锁的条件、排查、避免**:互斥条件、请求与保持条件、不剥夺条件、循环等待条件等。 - **互斥锁、自旋锁、读写锁、悲观锁、乐观...
11. **MySQL Sleep 线程过多如何解决** - 优化查询性能,减少不必要的等待。 - 调整配置参数,如 innodb_lock_wait_timeout。 12. **Sort_buffer_size 参数作用** - 用于控制排序缓冲区的大小。 13. **如何在线...
HashMap的扩容、红黑树转换(当元素达到8个时,链表转红黑树)、最小树化容量(4个元素时,树化不再进行)、哈希冲突解决策略(开放寻址法或链地址法)等都是常见问题。面试官可能会询问为何选择红黑树而非其他类型...
使用哈希表存储键值对,通过键的hashCode()计算桶位置,解决冲突使用链地址法。 23. **HashSet的实现原理**: 基于HashMap实现,每个元素作为键,值为null。 24. **ArrayList与LinkedList的区别**: ArrayList...
- **复制机制**:CouchDB支持双向同步,可以在多个服务器之间复制数据,提供高可用性和容错性。 2. **CouchDB设计哲学** - **面向文档**:CouchDB强调以文档为中心的设计,适合处理结构化和半结构化的数据。 - *...
- `LinkedList`基于双向链表实现,不支持随机访问,但插入和删除操作效率较高。 19. **List遍历删除元素** - 使用迭代器`Iterator`来遍历并删除元素,可以避免`ConcurrentModificationException`异常。 - `fail-...
- **同步性**:`HashTable`中方法是同步的,而`HashMap`不是。 - **初始容量大小**:`HashMap`默认初始容量为16,而`HashTable`默认初始容量为11。 - **扩容方式**:`HashMap`的扩容是在原有基础上翻倍再加1;`...
- 解决类路径冲突问题。 - 提高安全性,避免不同应用间类的相互干扰。 6. **Tomcat如何进行优化?** - 调整 JVM 参数。 - 使用连接池管理数据库连接。 - 启用缓存机制。 - 优化代码逻辑。 ### 五、Web技术 ...
- **Vector**: 同ArrayList,但所有方法都是同步的,适用于多线程环境。 **3. `java.util.HashMap`的用途及实现原理** - **用途**: 存储键值对,提供快速的查找功能。 - **实现原理**: 使用哈希算法将键映射到桶...
- MySQL JDBC驱动(例如mysql-connector-java-x.x.xx.jar) 3. **创建Hibernate配置文件**:在项目的src目录下创建`hibernate.cfg.xml`文件,并且为了方便调试,通常还会加入log4j的日志配置文件。 4. **定义实体...