从 PHP 连接到我的本地主机 MySQL 实例时出现间歇性错误:mysqli_connect(): HY000/2013

Posted

技术标签:

【中文标题】从 PHP 连接到我的本地主机 MySQL 实例时出现间歇性错误:mysqli_connect(): HY000/2013【英文标题】:Intermittent error connecting to my localhost MySQL instance from PHP: mysqli_connect(): HY000/2013 【发布时间】:2011-12-18 08:41:38 【问题描述】:

我有一个 LAMP 网站 (php/mysql),我非常依赖我的 MySQL 数据库。

最近开始间歇性出现以下错误:

[30-Oct-2011 16:11:49] PHP Warning:  mysqli_connect() [<a href='function.mysqli-connect'>function.mysqli-connect</a>]: (HY000/2013): Lost connection to MySQL server at 'sending authentication information', system error: 32 in /home/path/to/my/code.php on line 1029

这是第 1029 行,偶尔会出现上述错误的特定行:

$db = mysqli_connect($cfg['db_location'], $cfg['db_reader_username'], $cfg['db_reader_password']);

其中$cfg['db_location']"localhost",用户名和密码正确。

似乎有什么东西导致我的 PHP 脚本间歇性地失去与 MySQL 服务器的连接,这让我感到困惑,因为 所有 我的 MySQL 连接都是与 localhost 建立的。也就是说,PHP脚本和MySQL服务器都在同一个盒子上运行,我通过localhost连接到MySQL。

此外,这令人费解,因为我的 PHP 脚本能够成功连接到 MySQL 服务器,可能有 90% 的页面。

据我所知,我的服务器有大量可用的 RAM 和 CPU:

top - 16:38:23 up 173 days, 19:19,  2 users,  load average: 0.57, 0.78, 0.84
Tasks: 142 total,   4 running, 137 sleeping,   0 stopped,   1 zombie
Cpu(s): 18.7%us, 27.5%sy,  0.7%ni, 52.6%id,  0.2%wa,  0.1%hi,  0.2%si,  0.0%st
Mem:   2976260k total,  1861368k used,  1114892k free,   532628k buffers
Swap:  2048248k total,      116k used,  2048132k free,  1035804k cached

还有足够的可用磁盘空间。当我运行df -h 时,我所有的文件系统最多只有 25% 处于使用状态。

所以我不知道是什么导致了我在 PHP 错误日志中看到的零星错误。

任何想法可能导致我的 PHP 脚本间歇性地失去与本地主机上的 MySQL 服务器的连接?

我升级到 MySQL 5.1,这就是我运行 mysql -V 时得到的结果:

mysql  Ver 14.14 Distrib 5.1.56, for pc-linux-gnu (i686) using readline 5.1

尽管如此,同样的错误仍在发生:

[30-Oct-2011 20:26:18] PHP Warning:  mysqli_connect() [<a href='function.mysqli-connect'>function.mysqli-connect</a>]: (HY000/2013): Lost connection to MySQL server at 'sending authentication information', system error: 32 in /home/path/to/my/code.php on line 1029

和以前一样,错误仍然是间歇性的。

升级到 MySQL 5.1 后,我一直在仔细查看我的 PHP 错误日志。我注意到与第一个类似的其他一些错误。例如,这是一个这样的错误:

[30-Oct-2011 22:42:29] PHP Warning:  mysqli_connect() [<a href='function.mysqli-connect'>function.mysqli-connect</a>]: (HY000/2013): Lost connection to MySQL server at 'reading authorization packet', system error: 104 in /home/path/to/my/code.php on line 1029

这是我在日志中看到的另一个错误:

PHP Warning:  mysqli::mysqli() [<a href='mysqli.mysqli'>mysqli.mysqli</a>]: (HY000/2002): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /home/path/to/different/code.php on line 7

在所有情况下,问题基本上似乎是连接到 MySQL 失败。有什么想法可能导致此问题或如何调试它?

【问题讨论】:

mysql服务器版本是多少? @Dagon mysql Ver 14.12 Distrib 5.0.92, for pc-linux-gnu (i686) using readline 5.1 另一个有趣的观察:我在我的数据库上运行mysqlcheck。大多数时候,我运行mysqlcheck 效果很好。但是,有一次我收到以下错误:mysqlcheck: Got error: 2013: Lost connection to MySQL server at 'sending authentication information', system error: 32 when trying to connect 向您的问题添加信息时,请将其放入您的问题正文中。 =) “MySQL Database Server 5.0版的积极开发已经结束”我认为升级应该是第一步 【参考方案1】:

也许这个错误报告会有所帮助 - 似乎可以为全局 connect_timeout 设置更高的超时时间。在 MySQL 5.1 的更高版本(10 秒)中,它被设置为更高的值,而不是早期版本的 5 秒。

http://bugs.mysql.com/bug.php?id=28359

【讨论】:

以上是关于从 PHP 连接到我的本地主机 MySQL 实例时出现间歇性错误:mysqli_connect(): HY000/2013的主要内容,如果未能解决你的问题,请参考以下文章

尝试连接到远程 MySQL 主机(错误 2003)

进行本地连接时不允许主机连接到此mysql服务器[关闭]

进行本地连接时不允许主机连接到此mysql服务器[关闭]

从 MySQL 客户端通过 AWS 堡垒主机连接到 MySQL RDS 实例

尝试在我的本地主机中连接到我的数据库,但不断收到错误消息

Android设备无法连接到本地主机中的mysql [关闭]