PDO может подключаться к MySQL через localhost, но не удаленно, даже если это один и тот же сервер - PullRequest
1 голос
/ 08 февраля 2011

Допустим, сервер MySQL имеет значение mydomain.com:3306, а Apache и MySQL находятся на одном сервере.

Когда я загружаю свой PHP-скрипт на сервер, я всегда могу подключить MySQL к PDO и этому DNS:

mysql:host=localhost;dbname=my_database

Однако, если я изменю строку DNS на эту:

mysql:host=mydomain.com;dbname=my_database 

Только что изменили localhost на mydomain.com, все остальные настройки, такие как имя пользователя и пароль, остались прежними. Я получил это предупреждение:

OK packet 6 bytes shorter than expected

Я нашел много дискуссий о проблеме OK packet 6 bytes shorter than expected, и все они связаны с хэшированием пароля. Однако, поскольку я могу подключиться к серверу, используя параметр localhost, в моем случае я не думаю, что причина в хешировании пароля.

Кто-нибудь сталкивался с этой проблемой?

p.s. Я использую модуль базы данных Kohana 3.0.9 для подключения.
p.p.s. Версия MySQL: 5.1.52, версия PHP: 5.3.2

Ответы [ 4 ]

2 голосов
/ 08 февраля 2011

Вероятно, это связано с тем, что 127.0.0.1:3306 отличается от IP-адреса и порта yourExternalIP:3306, и использование вашего доменного имени будет связываться с вашим внешним IP-адресом , который не будет совпадать с IP-адресом localhost (127,0)..0.1)

Если вы не настроили mysql для прослушивания всех IP-адресов и разрешения доступа для всех пользователей с всех IP-адресов, вы не можете предполагать, что mysql прослушивает вашивнешний IP-адрес или доступ к имени пользователя / паролю с «удаленного хоста» (т. е. с и через ваш внешний IP-адрес)

0 голосов
/ 08 февраля 2011

Если ваша хостинговая компания использует SAT для своих серверов, это означает, что у вашего сервера есть внутренний IP-адрес (например: 10.0.0.101), а адрес переводит внешний IP-адрес, который вы разрешаете с помощью mydomain.com (пример: 241.34.31.2)тогда их брандмауэр может не быть настроен на фактическую маршрутизацию такого трафика обратно.

В любом случае, в этом случае не стоит форсировать весь трафик через брандмауэр, и вам лучше использовать свой IP-адрес напрямую (или localhost).

Но яугадывание других предложений здесь более правдоподобно, особенно если ошибка связана с проверкой пароля.

0 голосов
/ 08 февраля 2011

Драйверы MySQL имеют «оптимизацию», при которой использование «localhost» в качестве имени хоста вашего сервера будет внутренне переназначаться на использование сокетов unix-домена вместо сокетов TCP.Это по соображениям скорости, так как сокеты Unix намного быстрее, чем TCP (особенно потому, что у вас нет накладных расходов на полный прогон стека TCP), но это приводит к противоречивому поведению, как вы видите, особенно при использованиинесовпадающие версии драйверов.

0 голосов
/ 08 февраля 2011

Может ли клиент MySQL подключиться с использованием имени хоста?

  • Возможно, что mysql не слушает интерфейс, разрешенный DNS.
  • Или mysql может быть настроен с отключенным сетевым подключением, но вы можете подключиться локально через сокет.
...