您的位置:首页 > 其它

主主复制-主主复制时的主键冲突解决

2015-05-16 13:17 363 查看
大致思路:

1: 2台服务器都设置上二进制日志和relay日志

2: 都设置上replcation账号

3: 都设置对方为自己的master

PS:原理跟主从复制的配置步骤一样,两台主主服务器都需要配置主从相关的配置信息

主主复制下一定要注意避免的问题---------同步冲突

例:

create table stu (

id int primary key auto_increment.

)......

2台mysql地位相等, 假如2个请求同时到达2台服务器, 

请求的A节点,  stu 的id为1

请求的B 节点,  stu的id为1 , 

同步--->冲突

如何解决?

让1台服务器  1,3,5,7来增长

另1台服务器  2,4,6,8来增长

一台服务器:

set global auto_increment_increment = 2;//每步增长2

set global auto_increment_offset = 1; //从1开始增长

set session auto_increment_increment = 2;

set session auto_increment_offset = 1; 

另一台服务器:

set global auto_increment_increment = 2;

set global auto_increment_offset = 2; 

set session auto_increment_increment=2;

set session auto_increment_offset = 2; 

注:auto-increment-increment 和 auto-increment-offset 要写到配置文件 中,防止下次重启后失效.

操作后得到如下类似效果



如果后期需要加服务器,这个办法就有限制了.

我们可以在业务逻辑上来解决,

比如在oracle 有sequnce,序列.

序列每次访问,生成递增/递减的数据.

以redis为例, 我们可以专门构建一个 global:userid

每次PHP插入Mysql前,先 incr->global:userid, 得到一个不重复的userid.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: