如何在Python中更改默认的MySQL连接超时时间?

94 投票
4 回答
451548 浏览
提问于 2025-04-17 14:57

我用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 个回答

18

我知道这个问题已经有点老了,但为了记录一下,这个操作也可以通过在调用 _mysql.connect 时传入合适的连接选项来完成。例如:

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

注意这里使用了关键字参数(比如host、passwd等)。这样可以让你的代码更容易阅读。

关于可以传递给 _mysql.connect 的不同参数的详细信息,可以查看 MySQLdb API 文档

72

你可以在MySQL的配置文件中更改默认值(在mysqld部分找到connect_timeout选项) -

[mysqld]
connect_timeout=100

如果你无法访问这个文件,那么你可以使用下面的语句来设置这个值 -

SET GLOBAL connect_timeout=100;
102

要做的事情:

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

参数说明(来自MySQL Workbench的导航器:实例 > 选项文件 > 标签“网络” > 部分“超时设置”)

  • connect_timeout:mysqld服务器在收到连接请求之前,等待连接包的时间(单位是秒),如果超时就会返回“握手失败”。
  • interactive_timeout:服务器在一个交互式连接上等待活动的时间(单位是秒),如果超时就会关闭这个连接。
  • wait_timeout:服务器在一个连接上等待活动的时间(单位是秒),如果超时就会关闭这个连接。

顺便提一下:28800秒等于8小时,所以如果执行时间是10小时,这些值实际上应该设置得更高。

撰写回答