Подтвердить что ты не робот

Несовместимость PHP PHP

Я запускаю 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, я могу подключиться к обеим базам данных. Я не уверен, что объяснение этой странности.

4b9b3361

Ответ 1

У используемой вами учетной записи 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().
Что это значит?

Ответ 2

Я пытаюсь найти простое решение этой проблемы. Попробуйте этот подход. В 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;

Ваш пароль должен быть изменен. Это исправило это для меня.

Ответ 3

Сервер базы данных по умолчанию использует старые пароли. Сообщение об ошибке, которое вы получаете, это mysqlnd, видя базу данных, которая может поддерживать новую (безопасную) аутентификацию, но отказывается это делать. В этом случае mysqlnd прерывает соединение и отказывается работать.

Убедитесь, что у my.cnf нет

old-passwords = 1 

После того, как вы закомментируете этот параметр из my.cnf(или удалите его из того места, где он еще может быть установлен) и перезапустите сервер, обязательно заново установите пароль, используя команду VolkerK, иначе вы не будете иметь возможность входа в систему.

Ответ 4

Более простым решением является удаление пользователя базы данных и создание нового с тем же именем пользователя и паролем.

Ответ 5

Как сказал пользователь Evernoob:

"Возвращение к PHP 5.2. * т.е. что-либо ниже 5.3.0 полностью разрешает проблему. Пока я не запущен 5.3.0, я могу подключиться к обеим базам данных. Я не уверен, что объяснение для этой странности"

В случае подключения к совместно используемому шлангу (в нашем случае DreamHost), который использует параметр oldpassword, мы не смогли изменить таблицу users. Эти предлагаемые варианты будут работать в других сценариях, просто не с общим веб-хостингом.

Следует отметить, что мы запускаем WAMP.

Ответ 6

Мой веб-хост имеет разные версии PHP/MySQL, настроенные и для использования определенного. Мне нужно использовать правильное расширение .php - особенно .php5. Это может быть что-то простое.

Ответ 7

Возвращение к PHP 5.2. * сделал трюк! СПАСИБО!

Если вы используете WAMP... left click wamp > php > version > get more >

выберите нужную версию и загрузите ее.

установить/запустить exe

щелкните левой кнопкой мыши wamp > php > version > PHP 5.2. *

Это исправило эту проблему. Я не смог запустить любую из этих команд SQL, не получив ошибку "команда, запрещенная пользователю" XXX @localhost. Хороший взгляд, пытающийся войти в систему как SU 'Root'. Может быть, на личном сервере, но не будет происходить на реальном хосте.

Ответ 8

У меня была эта проблема с сайтом Wordpress, который внезапно прекратил работать и отображал эту ошибку.

Я нашел графический интерфейс на панели управления веб-сайта, что позволило мне изменить пароль для пользователя базы данных. Я попытался изменить его на текущий пароль, и это не было разрешено, потому что текущий пароль был недостаточно сильным.

Я изменил пароль базы данных на новый, более сильный пароль и отредактировал мой файл wp-config.php, чтобы получить новый пароль.

Это сработало!

Итак, я предполагаю, что хостинг-провайдер обновил что-то, может быть, MySQL, до версии, требующей более сильных паролей. Исправление для меня заключалось в использовании GUI cpanel для изменения пароля пользователя базы данных и обновления wp-config.php для соответствия.

Ответ 9

После долгих поисков и попыток я нашел способ без необходимости понижения/обновления MySQL и любого влияния на других пользователей работающего экземпляра MySQL.

Решение состоит в том, чтобы сбросить пароль:

для версий MySQL новее 5.7.5 (> 5.7.5):

ALTER USER 'mysqlUsername' @'hostname' ИДЕНТИФИЦИРОВАНО С mysql_native_password BY 'mysqlUsernamePassword';

для более старых версий MySQL: (<= 5.7.5)

УСТАНОВИТЬ ПАРОЛЬ ДЛЯ 'mysqlUsername' @'hostname' = ПАРОЛЬ ('mysqlUsernamePassword');

Я нашел точку здесь !

Это заставило мою работать хорошо!