Как исправить ошибку mysql_native_password is not loaded в MySQL 8.4

Источник: «How to fix mysql_native_password not loaded errors on MySQL 8.4»
Как исправить ошибку SQLSTATE[HY000] [1524] Plugin 'mysql_native_password' is not loaded, вызванную тем, что MySQL 8.4 больше не подключается по умолчанию плагин mysql_native_password.

Одним из основных изменений, внесённых в MySQL 8.4 (последний выпуск LTS по состоянию на 2024 год), стало то, что плагин "MySQL Native Password" больше не подключается по умолчанию.

Это изменение затрагивает PHP и другие приложения, использующие базу данных MySQL с плагином аутентификации mysql_native_password. Поскольку плагин mysql_native_password больше не загружается по умолчанию, соединения PHP PDO/MySQLi не работают.

При попытке подключения к базе данных с помощью плагина mysql_native_password, который больше не загружается, PDO/MySQLi выдаёт ошибку, возвращаемую MySQL:

PDO:

SQLSTATE[HY000] [1524] Plugin 'mysql_native_password' is not loaded

MySQLi:

mysqli_sql_exception  Plugin 'mysql_native_password' is not loaded.

В MySQL 8.0.34 — 8.3 использование плагина mysql_native_password приводило к появлению предупреждений в журнале ошибок MySQL:

[Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'

В MySQL 8.4 внесено изменение, в результате которого плагин mysql_native_password больше не загружается, что приводит к ошибкам, показанным выше.

PHP поддерживает аутентификацию caching_sha2_password начиная с версии PHP 7.4. Чтобы исправить эту ошибку, измените плагин аутентификации пользователя MySQL на caching_sha2_password.

Список пользователей MySQL использующих mysql_native_password

В консоли MySQL выполните следующую команду, для получения списка пользователей, использующих устаревший плагин аутентификации:

SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';

Выполнение приведённой выше команды должно привести к появлению списка всех пользователей, использующих плагин mysql_native_password:

mysql> SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';
+------+-----------+-----------------------+
| user | host | plugin |
+------+-----------+-----------------------+
| test | localhost | mysql_native_password |
+------+-----------+-----------------------+
1 row in set (0.00 sec)

Обновление пользователей mysql_native_password на caching_sha2_password

На консоли MySQL с достаточными правами выполните следующую команду для каждого пользователя, использующего плагин mysql_native_password:

ALTER USER '<USERNAME>'@'<HOST>' IDENTIFIED WITH caching_sha2_password BY '<PASSWORD>';

Замените <USERNAME>, <HOST> и <PASSWORD> на имя пользователя MySQL, хост и пароль.

После обновления плагина аутентификации PHP и другие приложения смогут подключаться к базе данных через плагин caching_sha2_password.

Подключение плагина MySQL Native Password

Хотя MySQL 8.4 больше не использует плагин mysql_native_password по умолчанию, его всё ещё можно подключить. Это не рекомендуется делать, если только PHP-приложение не работает на PHP 7.3 или более старых версиях, где нет возможности использовать плагин caching_sha2_password.

Чтобы подключить плагин mysql_native_password, добавьте следующее в раздел [mysqld] конфигурационного файла MySQL и перезапустите службу сервера MySQL.

В системах на базе Debian/Ubuntu этот файл находится в каталоге /etc/mysql/. Рекомендуется создать для этого новый файл (например, с именем /etc/mysql/conf.d/enable-mysql-native-password.cnf).

# Подключение плагина mysql_native_password
[mysqld]
mysql_native_password=ON

Дополнительные материалы

Предыдущая Статья

Что такое ошибка HTTP 403 и как её исправить

Следующая Статья

Появится ли в PHP 8.4 инстанцирование класса без лишних скобок