PHP с MySQL 8. Ошибка 0+: сервер запросил неизвестный клиенту метод аутентификации

Я использую MySQL версии 8 на PHP 7.0.

Я получаю следующую ошибку при попытке подключиться к моей базе данных из PHP:

Ошибка подключения: SQLSTATE [HY000] [2054] Сервер запросил метод проверки подлинности, неизвестный клиенту

PHP может показать эту ошибку

Предупреждение: mysqli_connect(): сервер запросил неизвестный клиенту метод аутентификации [caching_sha2_password] в D:\xampp\htdocs\reg\server.php в строке 10

Как я могу решить эту проблему?

Ответ 1

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

По умолчанию и по какой-то причине плагином mysql 8 по умолчанию является auth_socket. В большинстве случаев приложения ожидают входа в вашу базу данных с использованием пароля.

Если вы еще не изменили свой подключаемый модуль аутентификации по умолчанию в MySQL, вы можете сделать это:
1. Войдите как root в mysql.
2. Запустите команду sql:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password';  

Замените "пароль" вашим корневым паролем. Если ваше приложение не входит в вашу базу данных с пользователем root, замените пользователя 'root' в приведенной выше команде на пользователя, которого использует ваше приложение.

Цифровой океан объясняет это здесь подробнее Установка Mysql

Ответ 2

Вы должны изменить настройки MySQL. Отредактируйте файл my.cnf и поместите этот параметр в раздел mysqld:

[mysqld]
default_authentication_plugin= mysql_native_password

Затем выполните следующую команду:

FLUSH PRIVILEGES;

Приведенная выше команда внесет изменения механизма аутентификации по умолчанию.

Ответ 3

Я пробовал много способов, но только эта работа для меня

спасибо за обходной путь

проверьте ваш **. env

MYSQL_VERSION=latest

затем введите эту команду

$ docker-compose exec mysql bash
$ mysql -u root -p 

(войдите как root)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';

затем зайдите в phpmyadmin и войдите как:

  • хост → MySQL
  • пользователь → root
  • пароль → root

надеюсь, это поможет

Ответ 4

Столкнувшись с той же проблемой, я не смог запустить Docker-контейнер WordPress с MySQL версии 8, поскольку его механизм аутентификации по умолчанию - caching_sha2_password вместо mysql_native_password.

Чтобы решить эту проблему, мы должны сбросить механизм аутентификации по умолчанию на mysql_native_password.

Найдите файл my.cnf в вашей установке mysql, обычно на машине с Linux он находится по следующему адресу -/etc/mysql

Отредактируйте файл my.cnf и добавьте следующую строку под заголовком [mysqld]

default_authentication_plugin = mysql_native_password

Сохраните файл и войдите в командную строку mysql, используя пользователя root

запустить команду FLUSH PRIVILEGES;

Ответ 5

Ни один из ответов здесь не работал для меня. Что мне нужно было сделать, это:

  1. Перезапустите установщик.
  2. Выберите быстрое действие "переконфигурировать" рядом с продуктом "MySQL Server".
  3. Перейдите к параметрам, пока не дойдете до метода аутентификации, и выберите "Использовать устаревший метод аутентификации".

После этого все работает нормально.

Ответ 6

Я использую Laravel Lumen для создания небольшого приложения.
Для меня это было потому, что я не определил DB_USERNAME в моем файле .env.

DB_USERNAME=root

Установка это решило мою проблему.

Ответ 7

В файле my.cnf проверьте ниже 2 шага.

  • проверьте это значение -

    old_passwords = 0;

    это должно быть 0.

  • проверьте это also-

    [mysqld] default_authentication_plugin = mysql_native_password Еще одно значение, чтобы проверить, чтобы убедиться,

    Секция [mysqld] должна быть такой.

Ответ 8

preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password

как мой файл config.inc.php, перезапустил сервер apache и все заработало. Я все еще с подозрением относился к этому, поэтому я остановил сервер apache и mysql и запустил их снова, и теперь он работает.

Ответ 9

проверьте имя пользователя и пароль сервера sql, если ваш запуск xampp или wampp проверяет имя пользователя и пароль phpmyadmin