一般来说,错误:
错误:2006(CR_SERVER_GONE_ERROR
)-MySQL服务器已消失
表示客户端无法向服务器发送问题。
mysql
进口
在您的特定情况下,通过导入数据库文件 mysql
,这很可能意味着SQL文件中的某些查询太大而无法导入,因此无法在服务器上执行,因此客户端在第一个发生的错误上失败。
因此,您具有以下可能性:
添加强制选项(-f
),mysql
以继续执行其余查询。
如果数据库具有一些与缓存相关的大查询,而这些查询无论如何都不相关,则这很有用。
增加max_allowed_packet
并wait_timeout
在您的服务器配置中(例如~/.my.cnf
)。
使用--skip-extended-insert
选项转储数据库以分解大型查询。然后再次导入。
尝试为申请--max-allowed-packet
选项mysql
。
常见原因
通常,此错误可能意味着几件事,例如:
对服务器的查询不正确或太大,
解决方案:增加max_allowed_packet
变量。
确保变量位于[mysqld]
部分(而不是部分)下[mysql]
。
不要害怕使用大量数字进行测试(例如1G
)。
不要忘记重启MySQL / MariaDB服务器。
仔细检查该值是否通过以下方式正确设置:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
您从客户端的TCP / IP连接中收到了超时。
解决方案:增加wait_timeout
变量。
您尝试关闭服务器的连接后运行查询。
解决方案:应纠正应用程序中的逻辑错误。
主机名查找失败(例如DNS服务器问题),或者已使用--skip-networking
选项启动了服务器。
另一种可能是您的防火墙阻止了MySQL端口(例如,默认情况下为3306)。
正在运行的线程已被杀死,因此请重试。
您遇到了一个错误,该错误导致服务器在执行查询时死亡。
在其他主机上运行的客户端没有连接所需的特权。
以及更多其他信息,请访问:B.5.2.9 MySQL服务器已消失。
调试
这里有一些专家级的调试思路:
检查日志,例如
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
经测试您的连接mysql
,telnet
或ping功能(例如mysql_ping
在PHP)。
使用tcpdump
嗅探MySQL的通信(会为套接字连接不工作),例如:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
在Linux上,使用strace
。在BSD / Mac上,使用dtrace
/ dtruss
,例如
sudo dtruss -a -fn mysqld 2>&1
请参阅:DTracing MySQL入门
在以下网址了解更多如何调试MySQL服务器或客户端的信息:26.5调试和移植MySQL。
作为参考,请检查sql-common/client.c
文件中负责引发CR_SERVER_GONE_ERROR
client命令错误的源代码。
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}