本文来自上次那个小菜哥的投稿。他的网站还没上线,就不给链接了。
首先这是个悲伤的故事,但是真的发生了;
很幸运删的不是数据,只是用户,包括root用户,所以还有挽救的机会,不至于跑路;
事情是这样的:
某天发现mysql里root用户通过局域网地址居然可以直接免密码登陆进来;so,查看用户权限;
发现root可以通过这个IP访问进来,当然要干掉了;应该是之前设置权限的时候加错了忘记删了
so,开始干活,delete from mysql.user where user=root and host='xxxooo' 正确的应该是
这样的。然而我也不知道是手抖了,还是脑抽筋了。南方的冬天你懂的,光手敲键盘的感觉;
然后后面的where条件没加上直接就干掉了;然后就愣了十秒;
(博主事后诸葛亮一下:delete前,最好先select一下,看下where出来的结果是不是自己想删除的,
select user,host from mysql.user where user='root' and host='192.168.8.253';)
悲剧已经产生,再悲伤也无济于事:
首先这个时候不要急,只要不是删了数据,都不要急;因为你急也没用;问题
都出现了,首先是要解决问题,so,撸起袖子;深吸一口气:
首先,我们要让外面能正常访问mysql,你会问,用户都删了,怎么访问呢?
这个时候就相当于你忘记mysql密码一样操作,找到mysql.cnf配置文件;
在[mysqld]下添加skip-grant-tables 然后报错,重启mysql服务,这个时候链接mysql就不需要密码了,你正常的业务也不会
因为没有用户名和密码而链接不上,在这个模式下,所有业务都是正常使用的,这个我测试过,
so,这个时候更不用急了。
下一步,备份数据库,你肯定会问,这个时候还备份什么数据库,用户都被干掉了。
就是因为用户都被干掉了,我们的数据不能再出错,这个时候就需要备份数据库。这里备份数据库有2个操作;
第一步先直接完全复制data目录下的所有文件,这个是硬操作。把这里的东西全部保存到另外一个地方。以防
接下来的操作失误损坏数据;
第二步,使用mysqldump,把数据库里的业务库数据备份出来,因为这个时候是免密码登陆状态,所以直接空密码
把数据导出备份出来;
第三步,这里因为数据库数据没有受影响,所以正常来说,导出来的数据应该是没问题的;我们接下来就是要还原了
第四步,还原数据库,停掉mysql服务,删掉data目录下的所有文件,然后用mysql脚本初始化数据库,重新启动mysql设置root密码
初始化数据库的操作在安装mysql的文档里有讲,这里就不累赘了,重置了之后,使用root把刚刚导出来的数据库导入进去,
重新创建业务账号密码,并设置权限;
第五步,测试业务访问情况,流程都对的话,应该都OK;
第六步,定时备份数据库;
第七步,没有第七步,我就是比较喜欢7这个数而已。
回顾整个操作,在还原数据库之前,我还用了网上的插入root用户的方法,但是因为每个办法mysql的字段内容不一样,所以插入不成功,
这个方法是最稳妥也是最安全的方法,如果数据量很大的话,导入导出就有点慢。
最后,我的博客启用了一个很好记的域名, 3322.ee,诸位可以通过 http://3322.ee 进来。
原创文章,转载请注明: 转载自笛声
本文链接地址: 当整个user表被误删之后
12 条评论
看了标题我以为业务中的user表被删了。
一般不敢折腾服务器和数据库,就怕出现这种误操作
懿平生谨慎,不曾弄险。
我还以为最后一步是跑路。= =、
这个比我rm -rf /*服务器刺激多了。
以为删除了业务的数据库的user表
看来这个冬天有点爱搞事情啊!
这个真的得测试一下如果手残删错东西就完了
对于手残党一般还是保险为好
做任何操作之前先备份。。
任何对数据库的操作都还是先备份一下好。
备份还是很重要的!
操作之前备份是准则,不然有得哭