记一次mysql数据库root用户被删的恢复操作

779 阅读2分钟

本文已参与 \lceil新人创作礼\rfloor 活动,一起开启掘金创作之路

今天下午,接到‘老板’的任务,说是有台服务器的mysql中的root@localhost不小心被误删了,现在需要新增加一个库,root用户现在已经没法登录了,让我想办法恢复下。

图片 图片
图片

从描述中看,因为已经退出mysql的终端了,所以没法再添加这个用户了。然后我就上了服务器,现状就是这样: 图片

所以我的第一反应是先跳过密码验证,登录上去先看看是个什么情况。所以在my.cnf中添加skip-grant-tables参数后重启mysqld服务:

图片

用空密码进入了mysql终端,上翻历史记录找到下面这条误删语句:

图片

然后通过查阅各种资料并在自己虚拟上实验成功后,进入生产环境进行了恢复操作,下面是整个过程的步骤总结:

1、首先在/etc/my.cnf配置文件中的 [mysqld]下面添加skip-grant-tables用来跳过安全密码验证

2、重启mysql服务

# systemctl restart mysqld.service

3、使用mysql命令直接进入mysql终端,不需要密码

# mysql

4、使用mysql数据库

mysql> use mysql;

5、重新添加用户


mysql> insert into user set user='root',ssl_cipher='',x509_issuer='',x509_subject='';

mysql> flush privileges;

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'MyPass@123' WITH GRANT OPTION;

mysql> flush privileges;

mysql> select * from mysql.user where user='root' \G;

mysql> exit

6、在/etc/my.cnf配置文件上删除掉或者注释掉skip-grant-tables配置项

7、重启mysql服务

# systemctl restart mysqld.service

8、使用root用户登录成功,完成恢复

所以大家在生产环境操作一定要谨慎。在这次恢复过程中,查阅的很多资料都是错的,很多人都是直接复制或者转载的,自己根本没实践过的东西放到网上,所以在进行一个没有把握的操作时最好在自己虚拟机上先验证下,千万别拿生产环境直接试!好了今天就分享到这里,如果觉得还不错的小伙伴记得点赞关注加收藏哦,哈哈~~

本人一直在从事devops运维相关工作,欢迎大家关注我的个人公众[运维小白成长之路],会不定期更新运维相关经验分享,希望能和大家一起成长~~