家里的NAS服务器一直都是使用宝塔面板进行管理。近期发现,宝塔面板的数据库备份功能失效,提示无法连接数据库,无论是手动备份还是自动备份都不行,甚至是使用phpmyadmin登录,也是提示:Error 1698: Access denied for user ‘root‘@‘localhost‘ 。于是就开始查找原因。
首先说一下NAS目前的操作环境:
操作系统:Rocky Linux 9.3 x64版本
数据库:MariaDB 10.7
宝塔面板版本:8.0.4(8.0.3的时候已经发现这个问题,后来升级了也无法解决问题)。
解决过程如下:
一、分别执行以下命令,增加 Host 为 127.0.0.1 的root用户(下面的“您的密码”请替换成您自己数据库的root 用户密码),允许 root@127.0.0.1 连接:
GRANT ALL PRIVILEGES ON . TO ‘root’@’127.0.0.1’ IDENTIFIED BY ‘您的密码’ WITH GRANT OPTION;
FLUSH PRIVILEGES;
二、执行以下命令:
SELECT host,user,authentication_string,plugin FROM mysql.user;
出现如下画面:
从这个图里可以发现,Host为localhost的root用户,其authentication_string所对应的字段(密码)与其它两个Host的root用户是不一样的,且字段显示无效,这个应该就是导致无法用宝塔面板备份的原因。
三、删除 localhost下的 root 用户(该操作有一定风险,建议先通过其它途径备份好重要数据):
DROP USER ‘root’@’localhost’;
四、再次执行:
SELECT host,user,authentication_string,plugin FROM mysql.user;
发现 localhost 下的 root 用户已删除。
五、分别执行以下命令,重新增加 root@localhost 用户连接:
GRANT ALL PRIVILEGES ON . TO ‘root’@’localhost’ IDENTIFIED BY ‘您的密码’ WITH GRANT OPTION;
FLUSH PRIVILEGES;
注意:执行上述第四步之后,应该可以通过phpmyadmin进行登录了,也可以使用phpmyadmin进行增加 root@localhost 用户的操作。建议密码跟其它Host的root用户保持一致。