被删库勒索的一次记录
项目在云服务器运行了一年多了,中间迁移过一次,从阿里迁到华为了。
迁移的时候把数据库文件 test.sql 用完了之后就扔在了服务器上。
最近访问系统的时候,忽然系统崩溃,表不存在了。
数据库连接工具也连不上了,到服务器上的数据库连接工具也登录不进去了。
后来发现root用户没有了,新增了root用户,进入数据库,发现这个东西。。。
![](https://img-blog.csdnimg.cn/07560bbfbf244e32850d145f4b559a50.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZOI5ZOI5ZOIKg==,size_20,color_FFFFFF,t_70,g_se,x_16)
woc,中勒索病毒了?(事后发现不是服务器中毒,是密码太简单被破解了。。。)
想办法恢复数据吧,多方打探,找到通过binlog日志文件恢复数据的方法,但是基本都是linux系统的,但是大同小异,windows上基本一样。
介绍一下binlog日志文件,记录了库表字段数据的增删改操作,可用于主从数据同步、数据恢复。
window环境
1、登录mysql
mysql -u root -p
![](https://img-blog.csdnimg.cn/5649f24eda4441db846a7104c6bca896.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZOI5ZOI5ZOIKg==,size_19,color_FFFFFF,t_70,g_se,x_16)
2、查看日志文件(mysql8.0以前,是默认不开启的,得亏我用的是8之后的版本,不然真凉了)
show variables like ‘%log_bin%’;
![](https://img-blog.csdnimg.cn/2b8a2aa41d7a42bfaa9fdeed1232496a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZOI5ZOI5ZOIKg==,size_14,color_FFFFFF,t_70,g_se,x_16)
查看mysql目录下的 .ini 配置文件datadir配置的地址(我这里没有配置,默认就在mysql安装目录的data目录下)
![](https://img-blog.csdnimg.cn/d6d42ef74e6e4a3fbecb00047c83ec80.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZOI5ZOI5ZOIKg==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/f6652431e4d040c7bcf3bec6603cc4d7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZOI5ZOI5ZOIKg==,size_20,color_FFFFFF,t_70,g_se,x_16)
mysql安装目录的bin目录下,管理员打开cmd
3、执行命令(我为了方便把binlog.000001文件复制到bin目录下一份)
mysqlbinlog --no-defaults --base64-output=decode-rows -v binlog.000001 > binlog01.sql
生成下图带有被注释掉的SQL 语句的文件,通过这个文件
注:文件太大普通编辑器打不开的话,安装UltraEdit编辑器打开,拖到最后,这里记录了他的罪行
![](https://img-blog.csdnimg.cn/d79ff03dbb514889ab5d74cf01015d83.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZOI5ZOI5ZOIKg==,size_11,color_FFFFFF,t_70,g_se,x_16)
找到 删库前,最后一条正常的业务操作, at 648335612 (记住这个数字)![](https://img-blog.csdnimg.cn/57ba65863b584862857e355ccf770c8c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZOI5ZOI5ZOIKg==,size_20,color_FFFFFF,t_70,g_se,x_16)
拉到最前面,找到第一个at 4 (记住这个数字)
![](https://img-blog.csdnimg.cn/ae96102d68954fb590c1558e216c6408.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZOI5ZOI5ZOIKg==,size_20,color_FFFFFF,t_70,g_se,x_16)
4 删除坏掉的库,把原来 迁移的时候把数据库文件 test.sql 重新导入(这个文件的时间和日志的时间是匹配的,binlog文件是在此基础之后记录的)
注:每次重启MySQL服务和刷新日志的话,会产生新的日志文件,如果是多个,根据时间执行执行。
5 执行命令
--start-position=4 //开始操作记录节点(前面at后面的数字)
--stop-position=648334479 //结束操作记录节点(前面at后面的数字)
-d databasename //恢复指定数据库,mysql里面可能有多个数据库,不指定恢复所有库
binlog.000003
|mysql -uroot -p password databasename //登录mysql信息
mysqlbinlog --start-position=4 --stop-position=648334479 -d databasename binlog.000003|mysql -uroot -p password databasename
![](https://img-blog.csdnimg.cn/a6f713750f354db089e9196f2b09caba.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZOI5ZOI5ZOIKg==,size_20,color_FFFFFF,t_70,g_se,x_16)
等待完成,恢复成功。
最后:密码用的复杂一些,记得开启日志(损耗1%的性能左右),记得保存好迁移时的数据库文件。