2013-07-18 89 views
0

我正在爲我們的mysql服務器編寫一個基礎結構庫。 我必須處理的場景之一是從MySQL服務器暫時斷開連接。在mysql上處理(ER_QUERY_INTERRUPTED)的策略

測試場景是從數據庫100000附近開始,然後停止數據庫並將其恢復。

在這種情況下,我對在停止期間運行的查詢有意識地收到ER_QUERY_INTERRUPTED錯誤。 的問題是:

我可以承擔有關分貝(如不啓動查詢)的狀態東西認爲這是由於未定義behaiviour落這個問題倒鏈用戶?

+0

只要您在交易中執行此操作,就可以安全地重新嘗試查詢。事務中的斷開連接將導致SQL服務器上的自動回滾。如果您處於事務之外,則查詢_可能已提交,或_可能不是_。再次插入可能會導致重複的數據。 –

+0

@ColinMorelli:如果有人使用事務性存儲引擎,比如'InnoDB',那麼所有的操作都是「在一個事務中」(雖然它們可能會自動提交)。 – eggyal

+0

@eggyal我的意思是一個非自動提交事務。如果你沒有_explicitly_發送'COMMIT',你不能確定在斷開連接期間是否執行了查詢。 –

回答

0

經過一番測試後,出現了以下回答。 我們(和大多數人)使用默認模式爲事務的InnoDB。因爲如果ER_QUERY_INTERRUPTED發送到客戶端,服務器上的查詢將回滾。由於這種情況,在這種情況下的錯誤處理策略將僅僅是重新提交所有具有這種錯誤的查詢。