2015-06-08 62 views
0

我正在將遺留數據庫遷移到我在本地運行的一堆模型中。我連接到遺留數據庫並運行inspectdb來重新創建模型。現在,我正在編寫函數,將許多字段與新模型中的對等字段配對。我一直在使用shell_plus,並在第一分鐘左右的查詢去偉大的,但我保持連接超時 有以下幾點:遠程數據庫連接上的Django shell(加上)超時

RemoteArticle.objects.using("remote_mysql").all()  
django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server during query') 

是否有一個命令,我可以運行到任何一個)重新連接到db之前運行一個查詢(所以我不必重新打開shell_plus),或理想情況下b)使它使我所有的查詢自動重新連接每次我運行它們?

我在其他平臺上看到了超時問題,但我不確定Django是否有內置的處理方式。

謝謝!

回答

1

這裏有一個page in the MySQL文檔。既然你顯然是想遷移數據庫很大,這部分可能適用於您:

有時候,當數百萬行的是 發送一個或多個查詢的一部分「查詢時」的形式發生。如果知道這是 發生的情況,則應嘗試將net_read_timeout從其默認的 的30秒增加到60秒或更長,這足以使數據 傳輸完成。

超時是有道理的,因爲all()只是一個查詢檢索所有行。因此,在每個查詢之前重新連接並不是解決方案。如果更改net_read_timeout不是一種選擇,則可能需要考慮分頁。

+0

確認:問題的確是我的查詢太大/要求太多數據,並且MySQL連接在一段時間後超時。這臺服務器不是前端面向客戶端的,所以我能夠增加超時而沒有問題。 –

0

我相信Lost connection to MySQL server during query發生是因爲你耗盡了MySQL資源,如超時,會話和內存。

如果問題是由於超時,請嘗試增加超時--net_read_timeout=100.在數據庫服務器上。