2016-11-17 111 views
6

我在兩個MySQL數據庫中使用SQLAlchemy。其中之一是我的開發數據庫在我的機器上本地託管,另一個是ClearDB在Heroku上爲生產提供的MySQL服務器。診斷2013與MySQL失去聯繫

我有一個很長的運行會話與數據庫打開,同時它執行與另一個服務的同步操作。在我的本地機器上,這表現良好,但在生產中,我收到了錯誤(2013,'在查詢過程中丟失了與MySQL服務器的連接')。

我讀過其他職位,說它可以是請求的大小太大或池刷新變量需要調整。我不相信交易有效負載相對那麼大,並且在調用SQLAlachemy create_engine時似乎沒有工作,因此設置pool_recycle變量。

有沒有其他人經歷過這個問題,或者能夠幫助我縮小這個錯誤的根本原因 - 它看起來像是一個全部,我不知道該從哪裏去。

正如意見中的要求,無論是系統select @@interactive_timeout, @@wait_timeout返回相同的值:28800,28800

感謝

+1

請在您的開發數據庫和生產數據庫上發出這個SQL查詢。 'select @@ interactive_timeout,@@ wait_timeout'。請[編輯]你的問題,告訴我們你的兩個數據庫有什麼價值。有時生產數據庫比開發數據庫的超時時間更短。 –

+0

當我開始發佈這個內容時,我的意思是包含這些數字......但忘記了。我已經更新了我的問題。謝謝@ O.Jones – freebie

+0

您是否在交互式客戶端會話中選擇了變量?如果是這樣,你需要做'SELECT @@ global.interactive_timeout,@@ global.wait_timeout'。在交互式會話中,會話級別的「wait_timeout」被調整爲「交互式超時」,因此無用。 – elenst

回答

2

即使這兩個數據庫似乎是使用相同的超時和配置,一般。事實證明,這是ClearDB在其他地方執行的超時。

ClearDB監控連接並在打開一分鐘後將其殺死。我原本不能找到這個docuemnted

此修復程序實際上在創建引擎時將pool_recycle參數設置爲pool_recycle=60。我以前的這個嘗試使用的是任意數字(因爲我不知道ClearDB的超時時間)高於此值。