80

我使用 python 连接到一个 mysql 数据库con = _mysql.connect('localhost', 'dell-pc', '', 'test') 我编写的程序需要很长时间才能完全执行,即大约 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    |
+----------------------------+----------+

如何更改默认超时?

4

4 回答 4

87

做:

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

参数含义(取自 Navigator 中的 MySQL Workbench:Instance > Options File > Tab "Networking" > Section "Timeout Settings")

  • connect_timeout:mysqld 服务器在响应“错误握手”之前等待连接数据包的秒数
  • interactive_timeout服务器在关闭交互式连接之前等待其活动的秒数
  • wait_timeout服务器在关闭连接之前等待连接活动的秒数

顺便说一句:28800 秒是 8 小时,因此对于 10 小时的执行时间,这些值实际上应该更高。

于 2013-10-26T18:50:12.437 回答
66

您更改 MySQL 配置文件中的默认值(mysqld部分中的选项connect_timeout) -

[mysqld]
connect_timeout=100

如果您无法访问此文件,则可以使用此语句设置此值 -

SET GLOBAL connect_timeout=100;
于 2013-02-06T10:38:22.637 回答
17

我知道这是一个老问题,但为了记录,这也可以通过将适当的连接选项作为参数传递给_mysql.connect调用来完成。例如,

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

注意关键字参数(host、passwd 等)的使用。它们提高了代码的可读性。

有关可以传递给的不同参数的详细信息_mysql.connect,请参阅MySQLdb API 文档

于 2016-11-14T14:40:40.323 回答
8

MAX_EXECUTION_TIME 也是长时间运行查询的重要参数。适用于 MySQL 5.7 或更高版本。

检查当前值

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

然后根据您的需要进行设置。

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
于 2018-11-02T19:24:48.583 回答