mysql'replace into'仅在复制slave上失败

时间:2013-07-13 17:33:31

标签: mysql replication database-replication

此表的目的是按分钟收集多个统计信息(由name列指定),然后我写了一些sql,将分钟的总和()按名称汇总到小时,以及小时数(等)的总和(

这是表结构:

CREATE TABLE IF NOT EXISTS `stats` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `time` varchar(19) NOT NULL,
  `name` varchar(16) NOT NULL,
  `value` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `time_name` (`time`,`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=32060002 ;

这是“show slave status”给出的错误之一:

Last_SQL_Error: Error 'Duplicate entry '32189722' for key 'PRIMARY'' on query. Default database: 'quip_mailer'. Query: 'replace into stats select NULL, date_format( execute_time, '%Y-%m-%d %H:%i' ), 'sent', count(*) as v from queue as q where execute_time > '2013-07-13 16:17:00' group by date_format( execute_time, '%Y-%m-%d %H:%i' ) order by date_format( execute_time, '%Y-%m-%d %H:%i' )'

错误是主键,但正如您所看到的,传入的主键是NULL。

然后,为什么“替换”实际上不会启动并替换数据呢?对我没有意义。

如果我在奴隶上复制/粘贴运行那个确切的sql命令,就可以了。只有当它从复制中解决时才会出现问题。

1 个答案:

答案 0 :(得分:0)

登录到从属服务器并验证其上的自动增量值是否等于或高于主服务器上的当前最高值。可能发生的是自动增量值在某种程度上在主设备和从设备之间失去了同步。一旦知道了从机的自动增量值,就可以ALTER TABLE主机并将自动增量起始值设置为一个高于从机自动增量值的安全数字。