#php #mysql
#php #mysql — сервер
Вопрос:
Сегодня я провел небольшое исследование по этому вопросу, но, похоже, ничто не решает эту проблему. Недавно я обновился до PHP 5.3.3 с версии 5.1.6, а также обновил MySQL до версии 5.5 с версии 5.0. После этого следующий код выдает ошибку «Не удается подключиться к базе данных mysql»:
$connection = mysql_pconnect($dbhost, $dbusername, $dbpassword);
if (!$connection) {
//Can't connect
die('Could not connect: ' . mysql_error());
return;
}
И получаю следующую ошибку:
Предупреждение: mysql_connect(): не удается подключиться к серверу MySQL на ‘199.59.157.103’ (13) в /var/www/html/ws/Cust/customerWS_1_1.php в строке 19 не удалось подключиться: Не удается подключиться к серверу MySQL на ‘199.59.157.103’ (13)
Я могу подключиться к удаленному хосту через командную строку и перепробовал все, от сброса пароля до закрытия таблиц IP. Я в некотором роде в растерянности, поэтому буду признателен за любую помощь.
Ответ №1:
У нас была похожая проблема с тем же сообщением об ошибке «Не удается подключиться к базе данных mysql«, и, возможно, следующие пункты также будут полезны:
-
проверьте привилегии пользователя mysql (в нашем случае и при внешних подключениях у нас был старый IP-адрес сервера (разрешить доступ) в таблице)
GRANT ALL PRIVILEGES ON tablename.* TO 'username'@'145.1.1.2';
-> перезагрузить привилегии после изменений (FLUSH PRIVILEGES;
) -
отключите параметр SELinux. В новых версиях Plesk (> 10?) Это будет установлено включенным автоматически… —> в /etc/selinux/config измените строку с надписью:
SELINUX=enforcing
чтобыSELINUX=disabled
увидеть более подробную информацию: http://googolflex.com/?p=482
Ответ №2:
Существует ограничение драйвера PHP 5.3 mysql, связанное с хэшем старой схемы аутентификации, сохраненным в базе данных предыдущим сервером mysql. Это может вызвать проблему с сохраненными паролями, поэтому базы данных будут недоступны со старыми паролями.
Чтобы решить проблему, вы должны воссоздать пользователей mysql с тем же логином и тем же паролем.
Ответ №3:
Когда вы говорите «Я могу подключиться к удаленному хосту через командную строку», вы имеете в виду, что вы подключаетесь к серверу MySQL УДАЛЕННО? Или что вы отправляете SSHing на свой сервер MySQL и подключаетесь к нему из командной строки сервера MySQL? Если последнее, возможно, что при обновлении до MySQL 5.5 вы случайно остановили MySQL от привязки / прослушивания на общедоступном IP. Проверьте свой my.cnf
.
В противном случае: выполняется ли ваш PHP-код на том же сервере, что и ваш сервер MySQL? Вполне возможно, что ваши разрешения могут быть отключены. Разрешения MySQL очень специфичны при подключении к серверу MySQL через его IP-адрес, если клиент имеет доступ к подключению только с ‘localhost’, и наоборот.
Комментарии:
1. Когда я говорю удаленное подключение — я имею в виду, что с сервера, на котором размещен мой веб-контент, я могу подключиться, используя mysql -h <remote_host_ip>. Если бы это была проблема с неправильным прослушиванием MySQL, она вообще не должна была разрешать какие-либо удаленные подключения, верно?
2. Правильно. Когда вы подключаетесь из командной строки, используете ли вы те же имя пользователя и пароль, которые пытается использовать ваш скрипт?
3. ДА. Даже если я жестко запрограммирую информацию о соединении, я все равно получу ту же ошибку. Проверка таких обыденных вещей, как эта, обычно является первым, что я делаю, прежде чем обращаться к facepalm 🙂
4. просто в качестве теста… что, если ты
mysql_connect
вместоmysql_pconnect
этого?5. ): Есть ли у вас другой сервер MySQL, который вы можете протестировать? Это неприлично странная проблема.
Ответ №4:
Сначала вы должны убедиться, что параметры подключения $dbhost
, $dbusername
и $dbpassword
указаны правильно. Предполагая, что это правильно, вам следует проверить настройки mysql ini. Я бы предположил, что адрес привязки установлен на 127.0.0.1 или localhost, но не на общедоступный IP-адрес.
Также обратите внимание, что это угроза безопасности, если вы можете подключиться к mysql с общедоступного IP-адреса. Возможно, вы захотите поискать решение, которое не требует такого подключения.