修改Mysql的Auto_increment_increment

我的原文所在 http://yanmin.in/archive.html
多数据库中心方案避免命名冲突:数据中心A和数据中心B各自有自己的数据库,但为了避免命名冲突,一个中心的数据采用奇数编号,另外一个采用偶数(或者等中心数大于2的时候,对某一大于中心总数的数字取模)。如果从MySQL以及绝大多数的数据库角度,这个操作非常方便。简述如下:

假设A和B在初始时候的数据是一样的,最大编号(auto_increment的上一次给出值)是401。这个时候,只要简单的把两个数据库的auto_increment_increment设成2,
auto_increment_increment = 2

并且把A的数据库的表的AUTO_INCREMENT值设成一个比现在大得多的一个奇数,比如501,B设成502就好了。跳一下的好处是,可以不用停机,在一个机房操作完成的时候有足够的时间去操作第二个机房(只要那个机房的ID增长不要碰到502就好了)。从此A的id就按照503,505向上增长,而B的id开始按照502,504增长。
另外有一种直接使用GUID作为id的方案,个人觉得太重了。

这个方案做ID切分以后,就为master-master replication做好了准备。之后两个中心可以相互实时互相复制了。开起来也很美。

但问题是,在大型系统里面,就算有再成熟的技术,简单的永远胜过复杂的方案。对于master-master的复制,我现在依然心有余悸。我的心理障碍就是因为以前技术支持的时候做过一个case,就是因为Windows 2000里面的Domain Controller可以master-master的复制,原理上是一个有问题,其他的可以把好的信息传过来,但实际上,一个小bug或者一个不小心的配置,可以让一台主域控制器的错误拖垮其他的所有控制器。master-master的方案在多于2个节点的时候,也需要额外的设计。
以上内容参见:http://home.wangjianshuo.com/cn/cat_startup.html

方法一:

查看 auto_increment_increment和auto_increment_offset

mysql> SHOW VARIABLES LIKE 'auto_inc%';  

设置auto_increment_increment自增步长为n

mysql> SET @@auto_increment_increment=n;

设置auto_increment_offset自增开始数字为m

mysql> SET @@auto_increment_offset=m;

以上方法不生效,或重启mysql后,又变回来。使用方法二更改全局变量

方法二:

用vi编辑器打开配置文件:

$vi /etc/my.cnf

找到并设置
auto_increment_increment=1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值