如何重启MySQL服务时避免出现ERROR 1045访问拒绝错误
问题核心结论
重启MySQL服务属于系统级进程管理操作,本身不需要传入任何数据库主机、账号、密码类认证信息,你看到的1045访问拒绝报错,和服务重启动作本身没有直接关系,也无法通过在重启命令后追加认证参数的方式解决。
报错原因说明
sudo service mysql restart的执行逻辑是通过系统服务管理器向MySQL进程发送停止、启动信号,全程走系统级进程权限,不涉及MySQL数据库层面的账号鉴权。- 你看到的
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)提示,是MySQL服务启动完成后,系统自带的服务健康检查脚本、或默认客户端逻辑自动调用无参数的mysql命令尝试连接本地实例时抛出的错误:本地MySQL客户端默认读取的配置中没有配置正确的root账号密码,默认会以无密码方式尝试连接,自然会被鉴权拦截。 - 这个报错不代表服务重启失败,执行
sudo service mysql status查看服务状态,如果显示active (running)就证明服务已经正常启动完成。你手动指定-u root -h localhost -ppassword参数连接正常,也能佐证服务本身运行无异常,只是默认无参数连接的认证信息不对。
报错消除方法
不要在service mysql restart命令后追加数据库连接参数,该命令属于系统服务管理指令,根本不识别这类数据库参数,追加后不仅不会生效还可能触发命令解析错误。正确的解决方式是给本地MySQL客户端配置默认连接参数,让所有无参数调用mysql的场景都能自动读取正确的认证信息:
- 编辑执行service命令对应的用户家目录下的
.my.cnf配置文件(如果用sudo执行,对应root用户,配置文件路径为/root/.my.cnf),写入如下配置:
[client] user = root password = 你的MySQL root账号实际密码 host = localhost default-character-set = utf8mb4
- 给配置文件设置600权限,避免其他普通用户读取到明文密码:
chmod 600 /root/.my.cnf
配置完成后,后续重启MySQL服务时,自动触发的客户端连接会直接读取配置文件里的认证信息,不会再出现无密码连接被拒的报错,平时直接敲mysql命令也不需要手动输入连接参数就能直接登录。
内容的提问来源于stack exchange,提问作者Clone
相关产品推荐
相关产品推荐

