假设ID是int类型;
服务器A的ID范围段为1~10000;
B的ID范围段为10001~20000;
做双向同步的时候,假如A有一条数据的ID是500,那同步到B上还是500;
假如B上有一条数据的ID是15000,那同步到A上还是15000;
问一下有没有什么好的实现方式呢;
服务器A的ID范围段为1~10000;
B的ID范围段为10001~20000;
做双向同步的时候,假如A有一条数据的ID是500,那同步到B上还是500;
假如B上有一条数据的ID是15000,那同步到A上还是15000;
问一下有没有什么好的实现方式呢;
解决方案
20
建议在应用上区分把,就按照你的逻辑,范围1放到A,范围2的放到B,这样也不至于主键冲突。
20
LZ你好,
假如这个ID不是auto_increment类型的话,那就只能在应用层通过程序来实现了
假如是auto_increment类型的话,可以通过配置自增长参数来实现:
在这里我们在表A,B上加入参数,以实现不同插入
A:my.cnf上加入参数
auto_increment_offset = 1
auto_increment_increment = 1
这样A的auto_increment字段产生的数值是:1, 2,3,4,从1 开始
B:my.cnf上加入参数
auto_increment_offset = 10001
auto_increment_increment = 21
这样B的auto_increment字段产生的数值是:10001,10002,10003从10001开始
本人还有一个疑问,为什么master-slave中的主机里面的数据表的ID范围不同,这让本人很不解
假如这个ID不是auto_increment类型的话,那就只能在应用层通过程序来实现了
假如是auto_increment类型的话,可以通过配置自增长参数来实现:
在这里我们在表A,B上加入参数,以实现不同插入
A:my.cnf上加入参数
auto_increment_offset = 1
auto_increment_increment = 1
这样A的auto_increment字段产生的数值是:1, 2,3,4,从1 开始
B:my.cnf上加入参数
auto_increment_offset = 10001
auto_increment_increment = 21
这样B的auto_increment字段产生的数值是:10001,10002,10003从10001开始
本人还有一个疑问,为什么master-slave中的主机里面的数据表的ID范围不同,这让本人很不解
10
对,这个就是考虑了主键冲突的问题,否则要是两个主机都随便插入id,一定会重复的。