MySQL服务器root用户SSH登录无需密码,已尝试方案仍未解决
解决MySQL root用户SSH登录免密问题的方案
Hey,我来帮你搞定这个头疼的问题!你之前尝试的语句没起作用,大概率是因为MySQL的认证插件或者配置文件的问题,我给你一步步排查解决:
第一步:确认问题根源
你现在能免密登录MySQL,直接在SSH终端输入mysql -u root就能进去对吧?进去后先查一下root用户用的是什么认证插件:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
如果返回的plugin列是unix_socket,那就是关键问题了——这个插件允许本地系统的root用户(也就是你SSH登录的那个系统用户)直接免密访问MySQL的root账号,完全跳过密码验证。
第二步:修改root用户的认证方式
根据你的MySQL版本,选对应的操作:
如果你用的是MySQL 8.0及以上版本
执行这条语句切换为密码认证(把MyPass换成你想设置的密码):
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'MyPass'; FLUSH PRIVILEGES;
如果你用的是MySQL 5.7及以下版本
执行这条语句:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyPass'; FLUSH PRIVILEGES;
或者用你之前试过的UPDATE语句,但要加上修改插件的部分:
UPDATE mysql.user SET plugin='mysql_native_password', authentication_string=PASSWORD('MyPass'), password_expired='N' WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;
第三步:检查MySQL配置文件的免密设置
有时候配置文件里的参数会强制免密登录,你需要检查一下:
- 找到MySQL的配置文件,通常是
/etc/my.cnf、/etc/mysql/my.cnf,或者/etc/mysql/mysql.conf.d/mysqld.cnf(根据系统不同路径有差异) - 打开文件后,查找有没有
skip-grant-tables或者skip-password这两行,如果有,把它们注释掉(前面加#) - 重启MySQL服务生效:
# 适用于systemd系统(如Ubuntu 16.04+、CentOS 7+) systemctl restart mysql # 适用于init.d系统 service mysql restart
第四步:验证效果
退出当前的MySQL会话,然后在SSH终端输入:
mysql -u root -p
这时候应该会提示你输入密码,输入你设置的MyPass就能登录,说明已经生效了。另外别忘了同步phpMyAdmin的配置,找到phpMyAdmin的config.inc.php文件,把里面对应root用户的密码改成你新设置的,不然phpMyAdmin可能会连接失败。
内容的提问来源于stack exchange,提问作者jericpo
相关产品推荐
相关产品推荐

