2014-11-24 103 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。