具有自动递增主键的mysql主从应用程序

mbyulnm0  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(286)

问题在于标准
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'
我知道为什么这是一个问题,但我不知道如何解决它?

mbzjlibv

mbzjlibv1#

已知问题
mysql 8.0参考手册/…/复制和自动增量17.4.1.1
使用基于语句的复制无法正确复制调用触发器或函数(导致自动增量列的更新)的语句。这些语句被标记为不安全(错误(45677)
尝试基于行的日志记录或混合类型。也许会解决的。

相关问题