问题在于标准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'
我知道为什么这是一个问题,但我不知道如何解决它?
答案 0 :(得分:0)
已知问题
MySQL 8.0 Reference Manual / ... / Replication and AUTO_INCREMENT 17.4.1.1
调用触发器或函数的语句,该函数会导致更新 使用时无法正确复制AUTO_INCREMENT列 基于语句的复制。这些陈述被标记为不安全。 (Bug#45677)
尝试基于行的日志记录或混合类型。也许它会被解决。