如何通过python连接时更改默认的Mysql连接超时?

Ani*_*dey 54 python mysql corpus

我使用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    |
+----------------------------+----------+
Run Code Online (Sandbox Code Playgroud)

如何更改默认超时?

Ive*_*lin 57

做:

con.query('SET GLOBAL connect_timeout=28800')
con.query('SET GLOBAL wait_timeout=28800')
con.query('SET GLOBAL interactive_timeout=28800')
Run Code Online (Sandbox Code Playgroud)

参数含义(取自导航器中的MySQL Workbench:实例>选项文件>选项卡"网络">"超时设置"部分)

  • connect_timeout:mysqld服务器在响应"拒绝握手"之前等待连接数据包的秒数
  • interactive_timeout服务器在关闭之前等待交互式连接上的活动的秒数
  • wait_timeout服务器在关闭连接之前等待连接活动的秒数

BTW:28800秒是8小时,因此对于10小时的执行时间,这些值应该实际更高.

  • `gobal`会影响除当前连接之外连接到db的所有连接吗? (3认同)
  • 很高兴知道这三者之间的区别,或者至少有文档的链接. (3认同)
  • @zhkzyth 我也有类似的问题。这可能会有所帮助:/sf/ask/310823551/ 看起来“SET GLOBAL”会将变量设置为所有活动和未来的连接,直到下一次服务器重新启动。然而,有一个“SET SESSION”似乎可以设置特定于当前会话的变量。还有 https://dev.mysql.com/doc/refman/5.6/en/set-variable.html 了解更多信息。 (2认同)

Dev*_*art 50

你在MySQL配置文件(选项更改默认值connect_timeoutmysqld的部分) -

[mysqld]
connect_timeout=100
Run Code Online (Sandbox Code Playgroud)

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

SET GLOBAL connect_timeout=100;
Run Code Online (Sandbox Code Playgroud)

  • 同样,还有另外两个超时可以通过上述方法配置;wait_timeout和Interactive_timeout。有关详细信息,请查看链接;http://www.rackspace.com/knowledge_center/article/how-to-change-the-mysql-timeout-on-a-server (2认同)
  • @dfrankow所有值均以秒为单位。 (2认同)

nsa*_*ane 13

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

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

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

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


小智 7

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

检查当前值

SELECT @@GLOBAL.MAX_EXECUTION_TIME, @@SESSION.MAX_EXECUTION_TIME;
Run Code Online (Sandbox Code Playgroud)

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

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果值为“0”,则意味着未启用超时:https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_execution_time (3认同)