我有一个 php 应用程序,它将行插入表 A,这是非常简单的查询。 每 10-15 分钟一类。 直到上周,它还没有出现任何问题,但在磁盘故障之后,我将数据库移动到另一台服务器,这个问题开始发生。
没有返回错误,日志上没有任何内容,但我的插入丢失了。
有一个循环为每个循环插入一个新行。
每次插入后,我都会检查 mysqli_insert_id,然后将其记录到文件中。 然后我运行一个 SELECT 查询来检查该主字段是否确实在表中,是的。 受影响的行数为 1。 但是,当我从不同的 mysql 连接运行 SELECT 查询时,在 PHP 停止执行之前(因此它的连接仍然存在),什么也没有显示。
看起来像是自动回滚,但我没有发现任何死锁,使用了pt-deadlock-logger; http://www.percona.com/doc/percona-toolkit/2.1/pt-deadlock-logger.html
不知道是否还有其他原因导致自动回滚。
顺便说一句,我还发现,该 PHP 循环中还有其他 INSERT 查询,但它们也没有插入。
MySQL:5.6.21 引擎:InnoDB最佳答案
我发现了问题,在我们的应用程序代码深处的某个地方,我发现有时会执行此查询;
SET autocommit = 0
并且它永远不会被设置回 1。
关于php - 插入后缺少行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27108916/