Как исправить ошибку mysql_native_password is not loaded в 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