多数据库中心方案避免命名冲突:数据中心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;