2014-11-24 99 views
0

我有一个PHP应用程序插入行到表A,非常简单的查询。 它每10-15分钟运行一次。 直到上周,它没有任何问题,但在磁盘故障后,我将数据库移动到另一台服务器,并且此问题开始发生。插入后缺少行

没有错误返回,日志中没有任何内容,但是我的INSERT缺失。

有一个循环为每个循环插入一个新行。

每次插入后,我检查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的

+0

请,或不使用'mysql_ *'功能(http://stackoverflow.com/questions/12859942/why-shouldnt-i -use-mysql-functions-in-php),它们不再被维护,并且[已正式弃用](https://wiki.php.net/rfc/mysql_deprecation)。学习[准备的语句](http://en.wikipedia.org/wiki/Prepared_statement),并使用[PDO](http://us1.php.net/pdo)或[MySQLi](http:// us1.php.net/mysqli)。你确定PHP没有在新服务器上升级? – 2014-11-24 16:02:24

+0

我实际上并没有使用mysql_insert_id函数,我只是检查了我们使用的库,它调用了mysqli_insert_id。感谢您的高举。 我们只是更改了数据库服务器,PHP运行在同一台机器上。 – melih 2014-11-24 16:04:15

+0

你在查询和连接上正在做什么样的错误检查? – 2014-11-24 16:19:38

回答

0

我已经发现了这个问题,在什么地方我们的应用程序代码在内心深处,我发现这个查询有时被执行;

SET autocommit = 0 

它从来没有被重新设置为1。