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

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

创新互联公司是一家专业从事成都做网站、网站制作的网络公司。作为专业网站设计公司,创新互联公司依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、全网营销推广及网站设计开发服务!

例:

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;

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.


网站栏目:主主复制时的主键冲突解决
当前网址:http://ybzwz.com/article/gpohse.html