MySQL 误删 root 用户解决办法

本贴最后更新于 2316 天前,其中的信息可能已经渤澥桑田

背景

今天下午开发组反应无法使用 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  

参考文件

mysql 错误删除默认 root 用户解决办法

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    690 引用 • 535 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...