从PHP连接到我的本地MySQL实例时发生间歇性错误:mysqli_connect():HY000/2013。

4
我有一个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服务器版本是什么? - user557846
@Dagon mysql Ver 14.12 Distrib 5.0.92,适用于PC-Linux-GNU(i686),使用readline 5.1 - Jonathan
另一个有趣的观察是:我正在对我的数据库运行 mysqlcheck。大多数情况下,我运行 mysqlcheck 都很顺利。然而,有一次我收到了以下错误信息:mysqlcheck: Got error: 2013: Lost connection to MySQL server at 'sending authentication information', system error: 32 when trying to connect - Jonathan
当您向问题添加信息时,请将其放入问题正文中。=) - Shad
MySQL数据库服务器5.0版本的活跃开发已经结束。我认为升级应该是第一步。 - user557846
@Dagon,我已经升级到5.1了,但错误仍然存在。(我编辑的帖子底部包含更新的信息。) - Jonathan
1个回答

2
也许这份错误报告会有所帮助 - 似乎修复的方法是将全局connect_timeout的超时时间设置更长。在MySQL 5.1的后期版本中,它被设置为更高的值(10秒),而之前的版本则为5秒。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接