使用AUTO_INCREMENT主键的Mysql Master-Slave reaplication

时间:2018-05-02 08:33:45

标签: mysql master-slave

问题在于标准Mysql Master-Slave设置(slave是只读的,二进制日志记录设置为ROW),当主表中插入一行并带有自动增量主键时,例如,row获取ID 4288996,当在slave处复制相同的插入时,同一行变得不同ID,例如4289032(因为插入时没有主键值,这是自动生成的。)

现在,在Master的这一行发出UPDATE语句时,问题就出现了:

#180430 18:00:12 server id 1  end_log_pos 429933 CRC32 0xd0d85778
Update_rows: table id 260 flags: STMT_END_F
### UPDATE `cmon`.`simple_alarm`
### WHERE
###   @1=4288996
### SET
###   @13=1525104012
###   @15=1
# at 429933
#180430 18:00:12 server id 1  end_log_pos 429964 CRC32 0xdc9f3fa4       Xid = 452035

因为Slave上不存在相同的行(具有不同的ID):

  

'无法在表cmon.simple_alarm上执行Update_rows事件;无法在' simple_alarm'中找到记录,错误代码:1032;处理程序错误HA_ERR_KEY_NOT_FOUND;事件的主日志xxxxx_bin_log.000003,end_log_pos 429933'

我知道为什么这是一个问题,但我不知道如何解决它?

1 个答案:

答案 0 :(得分:0)

已知问题

MySQL 8.0 Reference Manual / ... / Replication and AUTO_INCREMENT 17.4.1.1

  

调用触发器或函数的语句,该函数会导致更新   使用时无法正确复制AUTO_INCREMENT列   基于语句的复制。这些陈述被标记为不安全。   (Bug#45677)

尝试基于行的日志记录或混合类型。也许它会被解决。