欢迎光临
我们一直在努力

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

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

例:

create table stu (

id int primary key auto_increment.

)……

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

请求的A节点,  stu id1

请求的B 节点,  stuid1 ,

同步—>冲突

 

如何解决?

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

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

一台服务器:

set global auto_increment_increment = 2;

set global auto_increment_offset = 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.

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。