在AWS通过PackStack安装OpenStack时遇MariaDB本地权限错误
解决MariaDB
mysql_secure_installation 报Access denied for user 'root'@'localhost'的问题 我来帮你搞定这个问题,这种root登录拒绝的情况在刚装完MariaDB后很常见,跟你修改/etc/hosts关系不大,核心是root用户的认证方式或者权限配置出了问题。下面是一步步的解决方法:
步骤1:跳过密码验证启动MariaDB
首先我们需要让MariaDB暂时跳过密码验证,这样才能登录进去修改配置:
- 编辑MariaDB的配置文件,常见路径是
/etc/my.cnf或者/etc/mysql/my.cnf(不同发行版可能略有差异) - 在
[mysqld]段落中添加一行:skip-grant-tables - 保存文件后重启MariaDB服务:
systemctl restart mariadb
步骤2:无密码登录MariaDB
现在可以直接无密码登录到MariaDB控制台:
mysql -u root
步骤3:修改root用户的认证方式和密码
登录成功后,切换到系统数据库mysql:
USE mysql;
接下来根据你的MariaDB版本执行对应的命令:
- MariaDB 10.4及以上版本:默认root用
unix_socket认证,我们改成密码认证并设置新密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的安全密码'; - MariaDB 10.3及以下版本:用
UPDATE语句更新密码:UPDATE user SET password=PASSWORD('你的安全密码') WHERE user='root' AND host='localhost';
执行完密码修改后,一定要刷新权限让配置生效:
FLUSH PRIVILEGES;
然后输入exit;退出MariaDB控制台。
步骤4:恢复正常启动并验证
- 回到之前编辑的MariaDB配置文件,删掉刚才添加的
skip-grant-tables这一行 - 再次重启MariaDB服务:
systemctl restart mariadb
现在再执行mysql_secure_installation,输入你刚才设置的新密码,就能顺利进行安全配置了。
补充说明
你修改/etc/hosts没用的原因是:这个错误里的'root'@'localhost'不是指localhost解析失败,而是MariaDB的用户权限表中,root用户针对localhost的登录规则不允许密码登录(比如默认用socket认证,只允许本地通过socket连接,而mysql_secure_installation尝试用TCP/IP或者密码方式登录),所以调整root的认证方式才是核心解决办法。
内容的提问来源于stack exchange,提问作者Durgesh Jha
相关产品推荐
相关产品推荐

