mariadb某些记录未更新

t40tm48m  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(81)

有没有可能在二进制日志中发生了一个事务,但在存储引擎(innodb)中它没有更新。
比如在二进制日志中,事务是这样的。但是在存储引擎(innodb)中不更新具有2和3的ID。

BEGIN
   UPDATE my_table SET status = 1, updated_at = NOW() WHERE id = 1
   UPDATE my_table SET status = 1, updated_at = NOW() WHERE id = 2
   UPDATE my_table SET status = 1, updated_at = NOW() WHERE id = 3
   UPDATE my_table SET status = 1, updated_at = NOW() WHERE id = 4
   UPDATE my_table SET status = 1, updated_at = NOW() WHERE id = 5
   COMMIT
yyyllmsg

yyyllmsg1#

这不是回答,而是太长的评论:
如果不分析服务器日志和二进制日志文件,给予你一个详细的答案是不可能的。

一些评论/提示:

1.确保语句属于同一个数据库,通常有不同的数据库(例如,备份)相同的表。运行带有--database yourdb选项的mysqlbinlog,以确保语句属于同一个数据库(不幸的是,mysqlbinlog不显示QUERY_EVENT的数据库名称,即使此信息是事件的一部分。
1.将Query事件的时间戳与时间戳列的内容进行比较。
1.* 二进制日志记录在语句或事务完成后立即完成,但在任何锁被释放或任何提交完成之前 *。这意味着有一个很小的时间窗口,在这个时间窗口中,错误可能导致未提交的事务出现在二进制日志中,而不是数据库中。为了避免这种情况,您可以使用XA事务。
1.正如Dan Black已经提到的,将MariaDB Server升级到最新版本。MariaDB 10.0于9年前发布,并于2019年到期。即使它支持最新的复制协议(版本4),在过去的10年里也有大量的变化,错误修复和改进。

相关问题