CentOS 7安装MySQL 8后Root账户无法登录的问题求助
解决CentOS 7下MySQL 8 Root账户无法登录的问题
嘿,我来帮你搞定这个头疼的MySQL登录问题!你的情况其实挺常见的,主要是MySQL 8在CentOS 7的systemd环境下,一些旧的操作方式已经不适用了,我给你一步步来:
步骤1:先停止正在运行的MySQL服务
首先得把当前的MySQL进程停掉,不然没法进行后续操作:
systemctl stop mysqld
步骤2:临时启动MySQL并跳过权限验证
你之前用mysqld_safe报错是因为MySQL 8在CentOS 7的systemd管理下,已经默认不再使用mysqld_safe脚本了,直接用mysqld二进制文件启动就行,还得加上跳过权限表和网络的参数(避免临时状态被外部连接):
mysqld --user=mysql --skip-grant-tables --skip-networking &
这里指定--user=mysql是为了避免权限不足的问题。
步骤3:无密码登录MySQL
现在可以直接无密码登录root账户了:
mysql -u root
步骤4:重置Root密码(这步其实是合理的,因为安装时可能生成了临时密码或者权限配置有问题)
进入MySQL后,先切换到系统数据库:
USE mysql;
然后刷新权限(避免后续修改时出错):
FLUSH PRIVILEGES;
接下来修改root密码,注意MySQL 8不再支持password()函数,要用ALTER USER命令,并且推荐用mysql_native_password认证方式(如果需要兼容旧客户端的话):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
如果你遇到“用户不存在”的报错,可能是root用户的host不是
localhost,可以先执行SELECT user, host FROM user;查看,然后把命令里的localhost换成对应的host即可。
步骤5:恢复正常启动
先退出MySQL:
EXIT;
然后杀死刚才临时启动的mysqld进程:
pkill mysqld
最后正常启动MySQL服务:
systemctl start mysqld
现在就可以用新设置的密码登录了:
mysql -u root -p
为什么你之前的方法失败?
mysqld_safe报错:CentOS 7用systemd管理系统服务,MySQL 8默认采用systemd直接管理mysqld进程,不再依赖mysqld_safe脚本,所以这个命令会失效。mysqld --initialize-insecure报错:这个命令是第一次初始化MySQL数据目录时用的,你已经通过yum安装完成了初始化,数据目录里已经有文件了,所以不能再执行这个命令。
内容的提问来源于stack exchange,提问作者Tiina
相关产品推荐
相关产品推荐

