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