【问题标题】:perl DBI mysql server has gone away - Not a timeout issueperl DBI mysql 服务器已消失 - 不是超时问题
【发布时间】: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。

标签: mysql perl dbi


【解决方案1】:

解决了。我将主机从 localhost 更改为 127.0.0.1 并且可以正常工作。

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2012-05-25
    • 2011-06-07
    • 2010-12-20
    相关资源
    最近更新 更多