web-dev-qa-db-ja.com

Python経由で接続するときに、デフォルトのMysql接続タイムアウトを変更するにはどうすればよいですか?

python con = _mysql.connect('localhost', 'Dell-pc', '', 'test')を使用してmysqlデータベースに接続しました。作成したプログラムは、完全な実行に多くの時間、つまり約10時間かかります。実際、コーパスから明確な単語を読み込もうとしています。読み取りが終了した後、タイムアウトエラーが発生しました。

次の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    |
+----------------------------+----------+

デフォルトのタイムアウトを変更するにはどうすればよいですか?

49
Animesh Pandey

行う:

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

パラメーターの意味(ナビゲーターのMySQL Workbenchから取得:インスタンス>オプションファイル>タブ「ネットワーク」>セクション「タイムアウト設定」)

  • connect_timeout:mysqldサーバーが「不正なハンドシェイク」で応答する前に接続パケットを待機する秒数
  • interactive_timeoutサーバーがインタラクティブ接続を閉じる前にアクティビティを待機する秒数
  • wait_timeoutサーバーが接続を閉じる前にアクティビティを待機する秒数

ところで:28800秒は8時間であるため、10時間の実行時間では、これらの値は実際に高くなります。

55
Ivelin

MySQL設定ファイルのデフォルト値を変更します(オプションconnect_timeout inmysqldセクション)-

[mysqld]
connect_timeout=100

このファイルにアクセスできない場合、このステートメントを使用してこの値を設定できます-

SET GLOBAL connect_timeout=100;
49
Devart

これは古い質問であることは知っていますが、記録のためだけに、適切な接続オプションを引数として_mysql.connect呼び出しに渡すことでも可能です。例えば、

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

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

_mysql.connectに渡すことができるさまざまな引数の詳細については、 MySQLdb API documentation を参照してください

10
nsane

MAX_EXECUTION_TIMEは、長時間実行されるクエリの重要なパラメーターでもあります。MySQL5.7以降で機能します。

現在の値を確認する

SELECT @@GLOBAL.MAX_EXECUTION_TIME, @@SESSION.MAX_EXECUTION_TIME;

次に、必要に応じて設定します。

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
2
xs2rashid