mysql lost connection to server during query

 

复现

Navicat Premium 16进行数据导出的时候,导出一半频繁报错 ” mysql lost connection to server during query“。单表数据在100w左右,连续关联了6张表,虽然需求很不合理,但能导出来就好。 单表字段也很多,平均30个左右。根据错误提示,mysql查询过程中丢失链接导致错误。

方法一 修改max_allowed_packet

经实践,修改该参数为512M之后,重启之后还是不能解决此问题。

方法二 调整net超时参数


innodb_read_io_threads = 16
innodb_write_io_threads = 16
net_read_timeout = 28800
net_write_timeout = 28800

下面是每个参数的解释:

  1. innodb_read_io_threads = 16
    • 这个参数控制InnoDB存储引擎在执行读取I/O操作时使用的线程数量。
    • 增加该值可以提高并发读取操作的性能,特别是在高负载情况下。
    • 默认值通常是较小的数字,但是可以根据系统配置和负载情况进行调整。
  2. innodb_write_io_threads = 16
    • 类似于innodb_read_io_threads,这个参数控制InnoDB存储引擎在执行写入I/O操作时使用的线程数量。
    • 增加该值可以提高并发写入操作的性能,特别是在高负载情况下。
    • 同样地,根据系统配置和负载情况,可以调整该参数的值。
  3. net_read_timeout = 28800
    • 这个参数控制MySQL服务器在等待接收数据时的超时时间,单位为秒。
    • 如果在规定的时间内没有收到来自客户端的数据,服务器将断开连接。
    • 默认值通常是较小的时间,但是可以根据实际需求进行调整。设置一个较大的值可以防止短暂的网络问题导致连接断开。
  4. net_write_timeout = 28800
    • 类似于net_read_timeout,这个参数控制MySQL服务器在等待发送数据时的超时时间,单位为秒。
    • 如果在规定的时间内无法将数据发送给客户端,服务器将断开连接。
    • 同样地,根据实际需求和网络环境,可以调整该参数的值。

调整之后可以导出数据。

本文遵守 Attribution-NonCommercial 4.0 International 许可协议。 Attribution-NonCommercial 4.0 International