Периодическая ошибка подключения к моему экземпляру MySQL на локальном хосте из PHP: mysqli_connect(): HY000/2013
У меня есть веб-сайт 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 работают на одном компьютере, и я подключаюсь к MySQL через localhost.
Кроме того, это озадачивает, потому что мой PHP-скрипт может успешно подключаться к серверу MySQL, возможно, на 90% страниц.
Насколько я могу судить, мой сервер имеет много свободной оперативной памяти и процессора:
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 на localhost?
Я обновился до 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. Есть идеи, что может быть причиной этого или как я могу отладить это?
1 ответ
Возможно, этот отчет об ошибке поможет - кажется, исправление может заключаться в том, чтобы установить более высокий тайм-аут для глобального connect_timeout. В более поздних версиях MySQL 5.1 было установлено более высокое значение (10 секунд), а в более ранних версиях - 5 секунд.