解决MySQL无法通过root登录的问题

技术 · 2022-04-09

起因
周五的时候,同事在解决由于导入视图没有权限的问题时,不知道动了哪个地方,造成root权限在本机上无法登录,明明密码是正常的,但是依旧被denied,同时提示的是root@%没有权限,众所周知这是为了配置了远程访问,但是无奈任何账号都登录不进去,只好先用无密码进行登录了。

无密码登录
通过网上查找,找到两种方法:

  1. 通过在[mysqld]下添加skip-grant-tables配置,并重启服务即可,试了一下好像不起作用,暂时没有这种方法。
  2. 先停止原有的MySQL服务,通过sudo mysqld_safe --skip-grant-tables &命令进行启动,但是会提示访问不到var/run/mysqld权限而失败,可以通过手动创建该目录,然后chown mysql:mysql /var/run/mysqld对该目录进行权限设置,再次启动后应该就成功了。

重设root权限
初步怀疑可能没有没有授权,保险起见,重新设置一下密码,流程跟忘记密码类似,具体操作如下:

use mysql;
update user set authentication_string=password('YOURSUPERSECRETPASSWORD') where user='root';
flush privileges;

退出后,kill掉MySQL进程,重启MySQL服务应该可以通过root登录了。

重设赋权权限
当时进去之后以为问题结束了,可是当用普通账号登录时依旧提示没有权限,直接用root权限登录,对普通账号进行赋权却依旧提示被拒绝,后来通过搜索发现Grant_priv权限全部为N,那就好办了,操作如下:

-- 查看所有用户的赋权权限
select Host,User,Grant_priv from user;
-- 修改指定用户的赋权权限,具体以实际用户为准
update user set Grant_priv='Y' where user='root';
flush privileges;

注销root用户并重新登录应该就可以了,以防万一也可以先重启服务。

结束

至此问题终于解决完毕,操作过程中如果权限不足也可以先执行flush privileges再执行sql语句试试。

参考链接:
https://www.techandme.se/reset-mysql-5-7-root-password/

数据库 mysql
Theme Jasmine by Kent Liao