Ошибка "Access denied for user 'root'@'localhost' (using password: YES)" при работе с СУБД
Симптомы
При выполнении действий в панели ispmanager появляется сообщение об ошибке
Access denied for user 'root'@'localhost' (using password: YES)
Эта ошибка может возникать при использовании любого нативного сервера баз данных - MySQL или MariaDB в зависимости от используемой операционной системы.
Причины
- Пароль для пользователя "root" сервера баз данных задали раньше (далее СУБД), чем была установлена панель;
- Сервер баз данных был установлен из стороннего репозитория помимо панели;
- Пароль пользователя "root" баз данных (далее БД) изменён вручную вне панели и после её установки.
Решение
Первым делом, введите актуальный пароль пользователя "root" БД в разделе "Серверы БД".
Путь до раздела для Lite, pro, host:
«Базы данных» → «Серверы БД» → «Изменить» → «Пароль»
Путь до раздела для Business:
«Настройки кластера» → «Узлы кластера» → выберите узел → меню "три точки" → «Серверы БД» → «Изменить» → «Пароль»
Если это не устранило ошибку, то убедитесь что пароль в файле "/root/.my.cnf" совпадает с паролем для пользователя "root" в панели и в базе данных нативной СУБД.
В случае утраты пароля, выполните следующие действия для его сброса:
1. В конец конфигурационного файла СУБД "my.cnf" добавьте секцию "[mysqld]" и два параметра, чтобы получилось:
[mysqld]
skip-grant-tables
skip-networking
Путь до файла в CentOS 7, CloudLinux, AlmaLinux 8, 9, RockyLinux 8:
/etc/my.cnf
Путь до файла в Debian 10, 11, Ubuntu 18, 20, 22:
/etc/mysql/my.cnf
2. Для применения новых параметров СУБД, перезапустите его службу:
- systemctl restart mysql - для Debian, Ubuntu, RockyLinux 8 и AlmaLinux 9;
- systemctl restart mysqld - для Almalinux 8;
- systemctl restart mariadb - для CentOS 7:
3. Подключитесь к серверу баз данных:
mysql
4. Сбросьте привилегии:
FLUSH PRIVILEGES;
5. Измените пароль пользователя "root":
ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';
, где <password> - новый пароль.
Если эта команда сработала, то перейдите к пункту 6. Если команда не сработала, выполните следующую команду:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('<password>');
В случае, если возникнет ошибка "ERROR 1290 (HY000): The MySQL server is running with the —skip-grant-tables option so it cannot execute this statement", снова сбросьте привилегии:
FLUSH PRIVILEGES;
После этого снова попробуйте изменить пароль.
6. Удалите параметры, добавленные в конфигурационный файл СУБД в пункте 1 - это необходимо для закрытия возможности несанкционированного доступа к СУБД.
7. Перезапустите службу СУБД соответствующей командой из пункта 2.
8. Для проверки подключитесь к серверу баз данных с помощью команды
mysql -uroot -p<password>
, где <password> - пароль, введенный в пункте 5.
9. В панели ispmanager перейдите в раздел "Серверы БД" и в поле «Пароль» введите ваш новый пароль. Опцию “Установить новый пароль” при этом отмечать не нужно.
Теперь взаимодействие панели с СУБД восстановлено!