Mysql решаем ERROR 1698 (28000): Access denied for user ‘root’@’localhost’

С такой ошибкой мы можем столкнуться не только при попытке входа в phpmyadmin под root, но и при иных запросах(например из php скриптов), которые требуется делать от root. Если мы не перепутали пароль, дело по всей вероятности в том, что root пользователь настроен для авторизации через плагин unix_socket. Войдем в консоль mysql от root и проверим, так ли это:

USE mysql;
SELECT User, Host, plugin FROM mysql.user;

Если напротив root мы видим unix_socket или auth_socket значит причина именно в этом. Есть несколько вариантов решения.

Можно установить пустое значение для поля plugin либо установить значение mysql_native_password

USE mysql;
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;
exit;

можно сделать тоже самое с одновременной установкой нового root пароля:

mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';"

либо можно создать для наших целей другого пользователя со всеми привилегиями для всех баз:

USE mysql;
CREATE USER 'YOUR_USER'@'localhost' IDENTIFIED BY 'USER_PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'YOUR_USER'@'localhost';
UPDATE user SET plugin='' WHERE User='YOUR_USER';
FLUSH PRIVILEGES;
exit;

после любых из перечисленных выше манипуляций, не забываем перезапустить mysql

systemctl restart mysql

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *