Linux系统root用户运行mysql命令报1045访问拒绝该如何解决
错误原因说明
Linux系统root账号与MySQL服务的root账号是完全独立的两套权限体系,MySQL的用户认证逻辑默认不关联操作系统用户权限,你直接执行mysql命令时没有传入登录密码,也没有提前配置免密登录规则,就会触发该报错。
你执行的命令:root@local:~# mysql
返回的报错信息:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
修复方案
- 如果你知道MySQL root账号的密码,直接执行带认证参数的登录命令即可:
执行命令后按提示输入MySQL root密码即可完成登录。mysql -u root -p - 如果你忘记了MySQL root账号的密码,可按如下步骤重置:
- 停止正在运行的MySQL服务
systemctl stop mysql - 以跳过权限校验的模式启动MySQL
mysqld_safe --skip-grant-tables --skip-networking & - 直接无密码登录MySQL
mysql - 切换到MySQL系统库
use mysql; - 按你使用的MySQL版本执行对应重置密码命令:
- MySQL 5.7/8.0及以上版本:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你设置的新密码'; - MySQL 5.6及更早版本:
UPDATE user SET password=PASSWORD('你设置的新密码') WHERE user='root' AND host='localhost';
- MySQL 5.7/8.0及以上版本:
- 刷新权限使配置生效
FLUSH PRIVILEGES; - 退出MySQL后终止跳过权限模式的进程,重启正常MySQL服务
systemctl restart mysql - 用新设置的密码测试登录即可。
- 停止正在运行的MySQL服务
- 如果你需要实现Linux root用户无需密码直接登录MySQL,可配置auth_socket认证插件:
- 登录MySQL后执行如下命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket BY ''; - 刷新权限
FLUSH PRIVILEGES;
配置完成后,只有Linux root用户直接执行mysql命令可免密登录,其余用户即使知道MySQL root密码也无法登录,安全性更高。
- 登录MySQL后执行如下命令:
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

