【发布时间】:2017-02-21 10:04:31
【问题描述】:
这个问题已经有很多帖子了,让我把突出的特点说清楚:
- perl DBI 会发生这种情况
- 它发生在 $db->do('delete rows from table where condition')
- 它在 db 对象创建后立即发生,即语句永远不会成功,永远
- 发生这种情况的脚本在我的工作站上完美运行,但在服务器上却无法运行
- 两台机器上的mysql版本相同: mysql Ver 14.14 Distrib 5.7.15,适用于 Linux (x86_64),使用 EditLine 包装器
我总是收到这个错误:
DBD::mysql::db do failed: MySQL server has gone away at (eval 18)[/usr/share/perl5/perl5db.pl:646] line 2
DBI_TRACE=1 没有特别显示任何内容
这可能是什么原因造成的?
非常感谢。
【问题讨论】:
-
你试过运行mysqlcheck吗?
-
感谢您的提示。我将检查该功能。但是,它用于检查表,在这种情况下,它是我无法与之通信的服务器。
-
“服务器已消失”表示您在成功建立连接后丢失了连接。 这可能在 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 socket 连接,如果你连接到 127.0.0.1,mysql 将使用 TCP/IP。