我使用percona服务器5.7作为AWS上的数据库。问题是,有时一排排没有线索就神秘地消失了。我使用Node.JS的后端已经从自动增量中获得了插入id,但在此之后,行将消失而没有任何跟踪。这种情况有时会发生,但每天都会发生。我该怎么做才能开始诊断这些问题?
更多信息:有时我的自动增量会像从1000跳到1004,没有人从phpmyadmin或我的脚本中删除它,因为它是“用户”表。在1000到1004之间注册的时间,mysql和nodejs根本没有错误日志。但是,此时MySQL由于未知的原因遇到了一些表锁定问题,有时使insert语句成为排队事件,我根本不做alter或任何表级别的更改。
发布于 2020-08-06 17:10:12
您使用了MySQL事务、AUTO_INCREMENT和InnoDB/XtraDB吗?
您的Node.js MySQL驱动程序是否使用隐式事务?
如果是这样的话,您可能会受到InnoDB AUTO_INCREMENT序列间隔的影响。您可以看到docs 这里,但简而言之,
在所有锁模式(
innodb_autoinc_lock_mode= 0、1和2)中,如果生成自动增量值的事务回滚,这些自动增量值将“丢失”。一旦为一个自动增量列生成了一个值,它就不能回滚,无论“插入类”语句是否完成,以及包含的事务是否回滚。这些丢失的值不被重用。因此,存储在表的AUTO_INCREMENT列中的值可能存在空白。
如果您偏执于删除的行,请使用general_log MySQL配置参数生成查询日志,然后根据缺少的行检查查询日志。请注意,查询日志可能很大,并且会对性能产生影响。
https://serverfault.com/questions/1028975
复制相似问题