什么是MySQL';s wait_timeout、net_read_timeout和net_write_timeout变量?

什么是MySQL';s wait_timeout、net_read_timeout和net_write_timeout变量?,mysql,Mysql,我正在执行批量插入并获取错误,错误为Mysql2::error:查询期间与MySQL服务器的连接丢失: 我在互联网和大多数要求增加net\u read\u timeout值的博客/文章中搜索了这个错误 我在互联网上搜索了net\u read\u timeout,但没有找到任何用易懂语言描述它的文章/博客。 在MySQL网站上,net_read_timeout被描述为“在中止读取之前等待来自连接的更多数据的秒数”。我完全被这句话搞糊涂了,不明白 我还想了解net_write_timeout和wai

我正在执行批量插入并获取错误,错误为
Mysql2::error:查询期间与MySQL服务器的连接丢失:

我在互联网和大多数要求增加
net\u read\u timeout
值的博客/文章中搜索了这个错误

我在互联网上搜索了
net\u read\u timeout
,但没有找到任何用易懂语言描述它的文章/博客。 在MySQL网站上,net_read_timeout被描述为
“在中止读取之前等待来自连接的更多数据的秒数”
。我完全被这句话搞糊涂了,不明白


我还想了解net_write_timeout和wait_timeout变量。

MySQL在不同阶段使用不同的超时变量

  • 当建立连接时,它使用
    connection\u timeout
  • 当它等待下一个查询时,它使用
    wait\u timeout
  • 当它在特定时间内没有收到查询时,它使用
    net\u read\u timeout
    net\u write\u timeout
  • 等等
通常情况下,
net\u read\u timeout
应该不是问题,但是当您遇到一些网络问题时,特别是在与服务器通信时,可能会引发此超时,因为您发送到数据库的查询不是单个数据包,MySQL会等待整个查询被读取,但是由于网络问题,它不接收查询的其余部分。MySQL不允许客户端在完全获取查询结果之前与服务器对话

您无法正确更改这两个变量,毕竟这两个变量都是变量

也可以从MySQL文档中读取

net\u read\u超时

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

net\u write\u超时

中止写入之前,等待块写入连接的秒数。另请参见网络读取超时

您可以使用


>mysql显示“%timeout”之类的变量

我了解等待超时设置。mysql默认等待超时为28800秒,即8小时。现在,要了解wait_timeout是如何工作的,请执行以下sql语句

设置等待超时=10

执行上述语句后,如果mysql服务器在10秒内未收到任何sql语句,则会自动关闭连接

要测试它,请等待10秒,然后执行任何sql查询,它将给您带来类似“查询执行期间mysql关闭连接”的错误


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

当您使用到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是控制何时中止的超时值

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


2019-08-14T15:21:26.584634Z 28440[注]中止了28440到db的连接:“员工”用户:“xxxx”主机:“本地主机”(写入通信数据包超时)

我将等待超时设置为30秒,并执行查询“选择睡眠(40)”,该查询睡眠40秒,然后我应该得到等待超时错误,但我仍然没有得到等待超时错误。你能给我举个例子,说明如何手动引发等待超时、净读超时和净写超时异常,以便我能更好地理解它。这有点奇怪,你有没有试过对我的答案进行查询?是的,我试过,它显示了不同变量的超时值,没有其他内容。你能给我举个例子来手动提高wait_timeout和net_read_timeout错误吗?我有一个类似的问题,我的站点一直在下降,因为有这么多的插入正在发生在数据库中,我该如何改进?