Guzei.com

Connect to Mysql 8 from PHP [caching_sha2_password]

Решение проблемы подключения к MySQL 8 из PHP.

Статьи

© 2019-02-06, Игорь Гузей (Guzei.com)

Проблема

При попытке подключиться к MySQL 8 через PHP получаем ошибку:
The server requested authentication method unknown to the client [caching_sha2_password]

Причина

1) В MySQL изменился метод проверки пароля по-умолчанию, а PHP его пока не поддерживат, поэтому надо переключиться на старый метод.

Об этом можно прочитать в документации:
Clients that use an implementation of the client/server protocol other than libmysqlclient may need to be upgraded to a newer version that understands the new authentication plugin. For example, in PHP, MySQL connectivity usually is based on mysqlnd, which currently does not know about caching_sha2_password. Until an updated version of mysqlnd is available, the way to enable PHP clients to connect to MySQL 8.0 is to reconfigure the server to revert to mysql_native_password as the default authentication plugin, as previously discussed.

2) А так же, при создании сервера создётся юзер у которого метод проверки пароля тут же и прописывается. Его надо сбросить.

И об этом можно прочитать в документации:
For upgrades to MySQL 8.0, the authentication plugin existing accounts remains unchanged, including the plugin for the 'root'@'localhost' administrative account.
For new MySQL 8.0 installations, when you initialize the data directory (using the instructions at Section 2.10.1.1, “Initializing the Data Directory Manually Using mysqld”), the 'root'@'localhost' account is created, and that account uses caching_sha2_password by default. To connect to the server following data directory initialization, you must therefore use a client or connector that supports caching_sha2_password. If you can do this but prefer that the root account use mysql_native_password after installation, install MySQL and initialize the data directory as you normally would. Then connect to the server as root and use ALTER USER as follows to change the account authentication plugin and password.

Решение

  1. - В Windows в файле конфиграции my.ini добавляем строку
    [mysqld]
    default_authentication_plugin=mysql_native_password
    - ИЛИ в Linux в файле конфиграции etc/my.cnf убираем комментарий у строки
    default_authentication_plugin=mysql_native_password
  2. Поправляем юзера установленного вместе с новым сервером:
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root_password';