问题在于标准
Mysql Master-Slave
setup(slave是只读的,binary logging设置为row),当一行用自动递增主键插入到master表中时,例如,这一行 ID 4288996
,当在从属位置复制同一插入时,同一行将变得不同 ID
例如。 4289032
(因为发出insert时没有主键值,主键值是自动生成的)。
现在问题来了 UPDATE
声明发布在master的这一行:
# 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
因为从属服务器上不存在同一行(具有不同的id):
'无法对表cmon.simple\u alarm执行更新\u行事件;在“简单报警”中找不到记录,错误代码:1032;处理程序错误,找不到密钥;事件的主日志xx\u bin\u log.000003,结束日志\u pos 429933'
我知道为什么这是一个问题,但我不知道如何解决它?
1条答案
按热度按时间mbzjlibv1#
已知问题
mysql 8.0参考手册/…/复制和自动增量17.4.1.1
使用基于语句的复制无法正确复制调用触发器或函数(导致自动增量列的更新)的语句。这些语句被标记为不安全(错误(45677)
尝试基于行的日志记录或混合类型。也许会解决的。