2013-02-06 42 views
32

我使用python連接到mysql數據庫con = _mysql.connect('localhost', 'dell-pc', '', 'test') 我寫的程序需要大量的時間完成執行,即大約10個小時。實際上,我試圖從一個語料庫中讀出不同的單詞。 閱讀完成後出現超時錯誤。如何在通過python連接時更改默認的Mysql連接超時?

我檢查這是Mysql的默認超時:

+----------------------------+----------+ 
| Variable_name    | Value | 
+----------------------------+----------+ 
| connect_timeout   | 10  | 
| delayed_insert_timeout  | 300  | 
| innodb_lock_wait_timeout | 50  | 
| innodb_rollback_on_timeout | OFF  | 
| interactive_timeout  | 28800 | 
| lock_wait_timeout   | 31536000 | 
| net_read_timeout   | 30  | 
| net_write_timeout   | 60  | 
| slave_net_timeout   | 3600  | 
| wait_timeout    | 28800 | 
+----------------------------+----------+ 

如何更改默認的超時?

回答

24

務必:

con.query('SET GLOBAL connect_timeout=28800') 
con.query('SET GLOBAL wait_timeout=28800') 
con.query('SET GLOBAL interactive_timeout=28800') 

參數含義(從MySQL工作臺取入導航:實例>選項文件>選項卡「網絡」>節「超時設置」)

  • connect_timeout:秒數mysqld服務器等待一個連接包關閉它
  • WAIT_TIMEOUT號碼的前一個互動的連接與「壞握手」
  • interactive_timeout秒數響應服務器等待活動之前秒服務器在關閉之前等待連接上的活動

順便說一句:28800秒是8小時,因此對於10小時的執行時間,這些值應該實際上更高。

+3

'gobal'是否會影響除當前連接之外連接到db的所有連接? – zhkzyth

+3

很高興知道這三者之間的差異,或者至少有一個鏈接到文檔。 – jlh

+0

@zhkzyth我有一個類似的問題。這可能有所幫助:https://stackoverflow.com/questions/4440336/mysql-wait-timeout看起來像「SET GLOBAL」會將變量設置爲所有活動連接和將來的連接,直到下一次服務器重新啓動。然而,有一個「SET SESSION」似乎設置了當前會話特有的變量。更多信息還有https://dev.mysql.com/doc/refman/5.6/en/set-variable.html。 –

41

在MySQL更改默認值的配置文件(選項connect_timeout的mysqld節) -

[mysqld] 
connect_timeout=100 

如果這個文件是不是你訪問的,那麼你可以設置使用此聲明中值 -

SET GLOBAL connect_timeout=100; 
+1

也有太多它通過上述方法配置的另外兩個超時。 wait_timeout&interactive_timeout。有關詳細信息檢查鏈接; http://www.rackspace.com/knowledge_center/article/how-to-change-the-mysql-timeout-on-a-server – csonuryilmaz

+0

請注意,如果使用配置文件方法,mysql客戶端可能不會反映改變,但你的腳本會!看我的帖子:http://stackoverflow.com/questions/9004400/mysql-modification-in-my-cnf-doesnt-take-effect/35186111#35186111 – BuvinJ

+4

什麼是單位? – dfrankow

5

我知道這是一個老問題,但只是爲了記錄,這也可以通過將適當的連接選項作爲參數傳遞給_mysql.connect調用來完成。例如,

con = _mysql.connect(host='localhost', user='dell-pc', passwd='', db='test', 
      connect_timeout=1000) 

注意使用關鍵字參數(主機,密碼等)。它們提高了代碼的可讀性。

有關不同的參數細節,可以傳遞給_mysql.connect,看到MySQLdb API documentation