perl DBI mysql服务器已经消失——不是超时问题

perl DBI mysql服务器已经消失——不是超时问题,mysql,perl,dbi,Mysql,Perl,Dbi,关于这个问题,已经有很多帖子了,所以让我明确一下它的显著特点: 它发生在perl DBI中 它发生在$db->do'delete rows from table where condition' 它发生在db对象创建之后,即语句永远不会成功 它发生在一个脚本上,该脚本在我的工作站上运行良好,但在服务器上不工作 两台机器上的mysql版本相同: mysql版本14.14发行版5.7.15,适用于Linux x86_64,使用EditLine包装器 我总是会遇到这样的错误: DBD::mysql::

关于这个问题,已经有很多帖子了,所以让我明确一下它的显著特点:

它发生在perl DBI中 它发生在$db->do'delete rows from table where condition' 它发生在db对象创建之后,即语句永远不会成功 它发生在一个脚本上,该脚本在我的工作站上运行良好,但在服务器上不工作 两台机器上的mysql版本相同: mysql版本14.14发行版5.7.15,适用于Linux x86_64,使用EditLine包装器 我总是会遇到这样的错误:

DBD::mysql::db do失败:mysql服务器在eval 18[/usr/share/perl5/perl5db.pl:646]第2行消失

DBI_TRACE=1不会显示任何特定内容

这可能是什么原因造成的


非常感谢。

问题解决了。我将主机从localhost更改为127.0.0.1,运行正常。

您试过运行吗?谢谢提示。我将检查该函数。但是,它用于检查表,在本例中,它是我无法与之通信的服务器。服务器已离开意味着您在成功建立连接后失去了连接。当mysqld崩溃时会发生这种情况。导致崩溃的可能原因有很多,但我看到的一个是表损坏,可以用mysqlcheck修复。我以前多次遇到过这个错误,直到现在,重新连接总是能解决它。这次奇怪的是,错误在连接后立即发生,甚至几毫秒。MySQL没有崩溃,它仍然活着,并且运行良好,表没有损坏。我读到MySQL对localhost的处理与127.0.0.1不同。我不知道为什么,但我的经验证实了这一点。做出这样的改变解决了问题。localhost在Ubuntu上工作,但我不得不在CentOS上使用127.0.0.1。re:127.0.0.1和localhost之间的区别:如果连接到localhost,mysql将使用unix套接字连接,如果连接到127.0.0.1,mysql将使用TCP/IP。