【发布时间】:2020-10-23 03:27:37
【问题描述】:
我有一个远程 MySQL 数据库,我部署的应用程序(一些 java 微服务应用程序)在一些 SQL 查询中始终遇到错误 ERROR 2013 (HY000): Lost connection to MySQL during query。然后我尝试使用 MySQL 命令行客户端连接到 mysql,执行相同的查询,并设法复制相同的错误。以下是关注此页面https://dev.mysql.com/doc/refman/5.7/en/error-lost-connection.html后的Mysql设置@
+------------------------------+----------+
| Variable_name | Value |
+------------------------------+----------+
| connect_timeout | 3600 |
| delayed_insert_timeout | 300 |
| have_statement_timeout | YES |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 5 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 7200 |
| lock_wait_timeout | 50 |
| net_read_timeout | 3000 |
| net_write_timeout | 6000 |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 4 |
| wait_timeout | 7200 |
+------------------------------+----------+
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| max_allowed_packet | 1073741824 |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
但是,在从 mysql 命令行客户端执行大 SQL 查询大约 10 分钟后,我系统地遇到了同样的错误。
注意:在 DB 服务器端,我注意到日志 [Note] Aborted connection xxxxx to db: 'xxxxx' user 'xxxxx' host 'xxxxx' (Got an error writing communication packet)
DBA 在安装了 mysql 的服务器上成功执行了查询。但是我们必须远程使用mysql作为服务。
如果有人能提供帮助,我将不胜感激。
【问题讨论】:
-
如果 MySQL Server 进程断开连接,可能会发生错误。由于它是可重现的,我会寻找 MySQL 服务器崩溃并重新启动的证据。查看服务器上的 mysqld 错误日志。还要检查
SHOW GLOBAL STATUS LIKE 'Uptime'以查看自上次重新启动以来的秒数是否与您收到中止连接错误的时间相关(或稍后,因为它必须重新启动并进行崩溃恢复)。 -
您没有显示导致此错误的 SQL 查询,但由于它在您收到错误时运行了至少 10 分钟,我想它很复杂。它可能会在服务器上造成过多的负载、RAM 或磁盘空间不足等。
-
@BillKarwin 我刚刚检查了 uptime 变量,并确认 mysql db 自从我上次(大约 2 天前)启动后没有重新启动。查询很长而且很讨厌。没有业务领域的知识就不容易理解。奇怪的是,这个问题可以系统地重现。我刚刚在 10 分钟前再次复制了它。
-
我会尝试重新设计查询,使其不那么复杂和讨厌。显然,它目前的形式太多了。抱歉,您可能无法在一个查询中完成所有操作。