背景
今天下午开发组反应无法使用 root 用户登录到 MySQL,在我登录失败几次的情况下,在配置文件中添加了 skip-grant-tables 选项,登录到 MySQL 服务,发现已经没有了 root 用户,而其他用户又没有 root 用户的权限,所以需要重新恢复 root 用户。
解决方法
由于该实例上的其他用户没有 root 权限,所以只能重新创建 root 用户,并且拥有最高权限,具体步骤如下:
1. 停止 MySQL 服务
$ service mysqld stop
2. 修改 MySQL 配置文件
在 MySQL 的配置文件中[mysqld]模块中添加 skip-grant-tables 配置项,示例如下:
[mysqld]
#GTID config
gtid_mode=ON
log-slave-updates=1
enforce-gtid-consistency=1
skip-grant-tables
3. 重启 MySQL 服务
启动 MySQL 服务,使配置项生效
$ service mysqld start
4. 无密码登陆 MySQL
$ mysql -p
5. 重新添加 root 用户
使用 insert 添加 root 用户
insert into user set user=’root’,ssl_cipher=”,x509_issuer=”,x509_subject=”;
6. 更新 root 用户权限
update user set Host='localhost',select_priv='y', insert_priv='y',update_priv='y', Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create\_user\_priv='y',show\_db\_priv='y',super_priv='y',create\_tmp\_table_priv='y',Lock\_tables\_priv='y',execute_priv='y',repl\_slave\_priv='y',repl\_client\_priv='y',create\_view\_priv='y',show\_view\_priv='y',create\_routine\_priv='y',alter\_routine\_priv='y',create\_user\_priv='y' where user='root';
7. 退出重新登录设置 root 密码
1) 退出 MySQL 服务
mysql> exit
2) 以 root 用户无密码登录
$ mysql -uroot -p
3) 设置 root 用户密码
mysql> update mysql.user set authentication_string=password('123456') where user='root';
mysql> flush privileges;
8. 注释掉配置文件中新添加参数
注释掉配置文件中的 skip-grant-tables 参数
[mysqld]
#GTID config
gtid_mode=ON
log-slave-updates=1
enforce-gtid-consistency=1
#skip-grant-tables
9. 重启 MySQL
$ service mysqld restart
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于