B.4.2.8 MySQL 服务器不见了

本节还介绍了相关的Lost connection to server during query错误。

出现MySQL server has gone away错误的最常见原因是服务器超时并关闭了连接。在这种情况下,您通常会获得以下错误代码之一(所获得的错误代码与 os 有关)。

Error Code Description
CR_SERVER_GONE_ERROR Client 端无法向服务器发送问题。
CR_SERVER_LOST Client 端在写入服务器时没有收到错误,但是没有得到问题的完整答案(或任何答案)。

默认情况下,如果什么都没发生,服务器将在八小时后关闭连接。您可以在启动mysqld时通过设置wait_timeout来更改时间限制。参见第 5.1.7 节“服务器系统变量”

如果有脚本,则只需再次发出查询,Client 端即可进行自动重新连接。假设您在 Client 端中启用了自动重新连接(这是mysql命令行 Client 端的默认值)。

MySQL server has gone away错误的其他一些常见原因是:

Windows 上的问题是,在某些情况下,在写入与服务器的 TCP/IP 连接时,MySQL 不会从 os 得到错误,而是在尝试从 Connecting 读取答案时会得到错误。

解决此问题的方法是,如果自上次查询以来已经很长时间了(在连接器/ ODBC 上执行此操作),则对连接执行mysql_ping(),或者在mysqld服务器上将wait_timeout设置得很高以至于在实践中永远不会超时。

插入大量行的INSERTREPLACE语句也可能导致此类错误。这些语句中的任何一个都将单个请求发送到服务器,而与要插入的行数无关。因此,通常可以通过减少每个INSERTREPLACE发送的行数来避免该错误。

如果在启用了skip_networking系统变量的情况下启动 MySQL,您可能还会看到MySQL server has gone away错误。

如果您的防火墙阻止了 MySQL 端口(默认 3306),则会发生另一个可能导致此错误的网络问题,从而根本无法与 MySQL 服务器构建任何连接。

您可以通过执行mysqladmin version并检查服务器的正常运行时间来检查 MySQL 服务器是否死亡并重新启动。如果 Client 端连接由于mysqld崩溃并重新启动而断开,则应集中精力查找崩溃的原因。首先检查是否再次发出查询会再次杀死服务器。参见第 B.4.3.3 节“如果 MySQLcontinue 崩溃该怎么办”

通过将log_error_verbosity系统变量设置为 3 来启动mysqld,可以获取有关丢失的连接的更多信息。这会将一些断开连接消息记录在hostname.err文件中。参见第 5.4.2 节“错误日志”

如果要创建有关此问题的错误报告,请确保包含以下信息:

另请参见第 B.4.2.10 节,“通信错误和中止的连接”第 1.7 节“如何报告错误或问题”

首页