MySQL Master-Master复制&自动增量列问题

时间:2011-11-19 17:02:00

标签: mysql replication auto-increment database-replication master-slave

我正在使用master-master复制进行一些测试,我遇到了一些奇怪的问题,我将尝试描述我遵循的程序,以便有人可以重现这个问题。

我在2个虚拟机和配置文件中为每个虚拟机设置了复制:

-- Master1 -- 
auto_increment_increment = 2
auto_increment_offset = 1

-- Master2 -- 
auto_increment_increment = 2
auto_increment_offset = 2

这些设置应导致自动增量列的算术级数:

- Master1: 1,3,5,7,9,11,13  ...
- Master2: 2,4,6,8,10,12,14 ...

Master1获得奇数,Master2获得偶数。 然后我创建一个测试数据库,然后添加一个包含以下定义的表:

CREATE TABLE `t1` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `c1` varchar(50) DEFAULT NULL,
 `d1` date DEFAULT '1970-01-01',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM;

当然,数据库是在两台服务器上创建的。之后,我执行

START SLAVE;
两台服务器上的

以便复制开始。 为了生成数据,我使用以下过程:

  • 必须插入单个记录才能使进程取消

    INSERT INTO t1(c1,d1)SELECT LPAD('',50,MD5(RAND())),DATE_ADD(CURDATE(),INTERVAL FLOOR(RAND()* 365)DAY);

    < / LI>
  • 然后使用同一个表中的INSERT - SELECT,它将以2 n 的速率开始插入, n 是您执行查询的时间:

    INSERT INTO t1(c1,d1)SELECT LPAD('',50,MD5(RAND())),DATE_ADD(CURDATE(),INTERVAL FLOOR(RAND()* 365)DAY)FROM t1;

提示:我发现此处描述的此方法也非常便于为表生成随机数据。

因此,当我在两台服务器上同时开始执行这些查询时,这总是会导致自动增量列的复制重复键错误。 如果有人有任何想法,我会很感激!

PS:当然,这种查询很少发生在生产应用程序中,但我相信它仍然证明了这一点。

0 个答案:

没有答案