Установив на свой компьютер nginx, php7 и MySQL 8 обнаружил, что я не могу подключиться к базам данных через adminer (офигенная легкая альтернатива phpmyadmin), получая сообщение SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client. Ниже как побороть ошибку.
В MySQL 8 была изменена схема хранения пароля, начиная с версии 8.0.4 длина хэша пароля увеличена до максимального (255 символов), а также изменили плагин аутентификации – вместо mysql_native_password используется caching_sha2_password. Потому, авторизоваться паролем, который был создан для root при установке базы данных, не получиться. Пароль пользователя надо обновить. Небольшой парадокс - для того, чтобы обновить пароль, с которым ты не можешь авторизоваться, нужно сначала авторизоваться 🙂 Как это сделать?
Первый вариант – использовать MySQL Workbench, которая идет в комплекте с MySQL. Она пускает по установленному паролю. В программе нужно откорыть окно создания нового запроса и ввести команду обновления пароля для root:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
Второй вариант – если не установлен MySQL Workbench, можно запустить командную строку MySQL и там ввести ту же команду. При запуске консоли MySQL будет запрошен пароль root’а.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';