2013-02-06 95 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番号とサーバーが待機を応答する前に、サーバは接続を終了する前に接続を待機します。

BTW:28800秒は8時間です。したがって、10時間の実行時間では、これらの値は実際には高くなるはずです。

+3

'gobal'は現在の接続を除いてdbに接続するすべての接続に影響しますか? – zhkzyth

+3

これらの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) 

キーワードパラメータ(host、passwdなど)の使用に注目してください。コードの可読性が向上します。

あなたは _mysql.connectに渡すことができる異なる引数についての詳細は、また、上記の方法により、設定されている、あまりにも他の二つのタイムアウトがある MySQLdb API documentation

関連する問題