Ок, возможно, я пропустил здесь что-то очень простое, но я не могу понять это.
Я запускаю WAMP локально, но подключаюсь к удаленной базе данных MySQL. Локальная версия PHP – это последняя версия 5.3.0.
Одна из удаленных баз данных, являющаяся версией 5.0.45, отлично работает. Однако другая удаленная база данных, к которой я пытаюсь подключиться, которая представляет собой версию 5.0.22, выдает следующую ошибку перед смертью:
Предупреждение: mysql_connect () [function.mysql-connect]: пакет OK на 6 байтов короче, чем ожидалось. PID = 5880 в …
Предупреждение: mysql_connect () [function.mysql-connect]: mysqlnd не может подключиться к MySQL 4.1+, используя старую аутентификацию в …
WTF?
ОБНОВИТЬ:
Возвращаясь к PHP 5.2. * Т.е. все, что ниже 5.3.0, полностью решает проблему. Пока я не запущен 5.3.0, я могу подключиться к обеим базам данных. Я не знаю, что объясняет эта странность.
У используемой вами учетной записи MySQL, вероятно, есть старый пароль длиной 16 символов (хэш).
Вы можете проверить это с помощью клиента MySQL (например, HeidiSQL, клиент консоли MySQL или любой другой клиент) и учетную запись, которая имеет доступ к mysql
. user
таблица. Если поле Пароль содержит 16 символов, это старый пароль, и mysqlnd не может использовать его для подключения к серверу MySQL.
Вы можете установить новый пароль для этого пользователя с помощью
SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')
см. dev_mysql_set_password
редактировать:
Вы также должны проверить, установлен ли сервер для использования / создания старых паролей по умолчанию .
edit2:
Запустите запрос
SELECT Length(`Password`), Substring(`Password`, 1, 1) FROM `mysql`.`user` WHERE `user`='username'
на сервере 5.0.22 (тот, который «не работает»). Замените username
учетной записью, которую вы используете в mysql_connect ().
Что это значит?
Я пытался найти простое решение этой проблемы. Попробуйте этот подход. В типе MySQL
SELECT Host, User, Password FROM mysql.user;
Если ваш пароль имеет шестнадцать символов, это связано с тем, что вы использовали OLD_PASSWORD у своего пользователя или используете старую версию MySQL. Чтобы обновить тип
UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;
заменяя root, localhost и newpass для вашего пользователя, хоста и прохода соответственно. Теперь, когда вы перепечатываете
SELECT Host, User, Password FROM mysql.user;
Ваш пароль должен быть изменен. Это исправило это для меня.
Сервер базы данных по умолчанию использует старые пароли. Сообщение об ошибке, которое вы получаете, это mysqlnd, видя базу данных, которая может поддерживать новую (более безопасную) аутентификацию, но отказывается это делать. В таком случае mysqlnd прерывает соединение и отказывается работать.
Убедитесь, что у my.cnf нет
old-passwords = 1
После того, как вы закомментируете этот параметр из my.cnf (или удалите его из того места, где он еще может быть установлен) и перезапустите сервер, обязательно заново установите пароль, используя команду VolkerK, иначе вы не сможете авторизоваться.
Более простым решением является удаление пользователя базы данных и создание нового с тем же именем пользователя и паролем.
Как сказал пользователь Evernoob:
«Вернемся к PHP 5.2. * То есть что-то меньшее, чем 5.3.0, полностью разрешает проблему. Пока я не запускаю 5.3.0, я могу подключиться к обеим базам данных. Я не уверен, что объяснение для этой странности»
В случае подключения к совместно используемому шлангу (в нашем случае DreamHost), который использует параметр oldpassword, мы не смогли изменить таблицу пользователей. Эти предлагаемые варианты будут работать в других сценариях, просто не с общим веб-хостингом.
Следует отметить, что мы запускаем WAMP.
Мой веб-хост имеет разные версии PHP / MySQL, настроенные и для использования определенного. Мне нужно использовать правильное расширение .php – особенно .php5. Это может быть что-то простое.
Возвращение к PHP 5.2. * Сделал трюк! СПАСИБО!
Если вы используете WAMP … left wamp> php> version> get more>
выберите нужную версию и загрузите ее.
установить / запустить exe
левый щелчок wamp> php> version> PHP 5.2. *
Это исправило эту проблему. Я не смог запустить любую из этих команд SQL, не получив ошибку «команда, запрещенная пользователю» XXX @ localhost. Хороший взгляд, пытающийся войти в систему как SU 'Root'. Может быть, на персональном сервере, но не будет происходить на реальном хосте.
У меня просто была проблема с сайтом WordPress, который внезапно прекратил работу и отобразил эту ошибку.
Я нашел графический интерфейс на панели управления веб-сайта, что позволило мне изменить пароль для пользователя базы данных. Я попытался изменить его на текущий пароль, и это не было разрешено, потому что текущий пароль недостаточно силен.
Я изменил пароль базы данных на новый, более сильный пароль и отредактировал мой файл wp-config.php, чтобы получить новый пароль.
Это сработало!
Поэтому я предполагаю, что хостинг-провайдер кое-что обновил, может быть, MySQL, до версии, требующей более сильных паролей. Исправление для меня заключалось в использовании графического интерфейса cpanel для изменения пароля пользователя базы данных и обновления wp-config.php для соответствия.