mysql:mysql的wait_timeout,net_read_timeout和net_write_timeout变量是什么?

时间:2015-12-19 09:48:31

标签: mysql

我正在批量插入并收到错误Mysql2::Error: Lost connection to MySQL server during query:

我在互联网上搜索了这个错误,并且大多数博客/文章都要求提高net_read_timeout价值。

我在互联网上搜索net_read_timeout,但没有得到任何以易于理解的语言描述它的文章/博客。 在mysql网站上,net_read_timeout被描述为"The number of seconds to wait for more data from a connection before aborting the read"。我对这个陈述完全感到困惑而没有得到它。

我也想了解net_write_timeout和wait_timeout变量。

谢谢,

3 个答案:

答案 0 :(得分:14)

MySQL为各个阶段使用不同的超时变量。

  • 建立连接后,使用connection_timeout
  • 等待下一个查询时,它使用wait_timeout
  • 如果在特定时间内未收到查询,则会使用net_read_timeoutnet_write_timeout
  • 依旧......

通常net_read_timeout不应该是一个问题,但是当您遇到网络问题时,尤其是在与服务器通信时,可能会引发此超时,因为您发送的是查询的单个数据包而不是数据库,MySQL等待读取整个查询,但由于网络问题,它没有接收到其余的查询。在完全获取查询结果之前,MySQL不允许客户端与服务器通信。

你无法正确改变这两个变量,毕竟是会话变量。

同样来自MySQL Doc,您可以阅读

net_read_timeout

  

在中止读取之前等待来自连接的更多数据的秒数。当服务器从客户端读取时,net_read_timeout是控制何时中止的超时值。当服务器写入客户端时,net_write_timeout是控制何时中止的超时值。另请参见slave_net_timeout。

net_write_timeout

  

在中止写入之前等待块写入连接的秒数。另见net_read_timeout。

您可以使用

检查MySQL本身的默认变量

> mysql show variables like '%timeout';

答案 1 :(得分:1)

我了解wait_timeout设置。 mysql默认wait_timeout是28800秒,其中8小时。现在来了解wait_timeout如何在sql语句之后执行。

设置wait_timeout = 10;

执行上述语句后,如果mysql服务器没有收到任何带有10秒的sql语句,那么它将自动关闭连接。

要测试它等待10秒然后执行任何sql查询它会在查询执行期间给出错误,例如" mysql关闭连接"

将很快更新我对net_read_timeout和net_write_timeout的回答。

答案 2 :(得分:0)

当您使用与mysql数据库的非缓冲连接,并且在执行查询后,您没有使用数据时,就会发生这种情况。 客户端python与非缓冲SSDictCursor连接

connection = pymysql.connect(host='localhost',
                             user='xxxx',
                             password='xxxx',
                             db='employees',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.SSDictCursor)
sql = " select * from employees"
cursor = connection.cursor()
cursor.execute(sql)
cursor.fetchone()

不执行任何操作,您的连接将超时 要么 如果未在60秒内(net_write_timeout)提取所有数据,则您的连接将中止。
来自doc的报价: 当服务器正在写入客户端时,net_write_timeout是控制何时中止的超时值

2019-08-14T15:20:26.465498Z 28440查询从员工选择的* *

2019-08-14T15:21:26.584634Z 28440 [注]与数据库的连接28440中止了:'员工'用户:'xxxx'主机:'localhost'(写入通信数据包时超时)