被删库勒索的一次记录
项目在云服务器运行了一年多了,中间迁移过一次,从阿里迁到华为了。
迁移的时候把数据库文件 test.sql 用完了之后就扔在了服务器上。
最近访问系统的时候,忽然系统崩溃,表不存在了。
数据库连接工具也连不上了,到服务器上的数据库连接工具也登录不进去了。
后来发现root用户没有了,新增了root用户,进入数据库,发现这个东西。。。
woc,中勒索病毒了?(事后发现不是服务器中毒,是密码太简单被破解了。。。)
想办法恢复数据吧,多方打探,找到通过binlog日志文件恢复数据的方法,但是基本都是linux系统的,但是大同小异,windows上基本一样。
介绍一下binlog日志文件,记录了库表字段数据的增删改操作,可用于主从数据同步、数据恢复。
window环境
1、登录mysql
mysql -u root -p
2、查看日志文件(mysql8.0以前,是默认不开启的,得亏我用的是8之后的版本,不然真凉了)
show variables like ‘%log_bin%’;
查看mysql目录下的 .ini 配置文件datadir配置的地址(我这里没有配置,默认就在mysql安装目录的data目录下)
mysql安装目录的bin目录下,管理员打开cmd
3、执行命令(我为了方便把binlog.000001文件复制到bin目录下一份)
mysqlbinlog --no-defaults --base64-output=decode-rows -v binlog.000001 > binlog01.sql
生成下图带有被注释掉的SQL 语句的文件,通过这个文件
注:文件太大普通编辑器打不开的话,安装UltraEdit编辑器打开,拖到最后,这里记录了他的罪行
找到 删库前,最后一条正常的业务操作, at 648335612 (记住这个数字)
拉到最前面,找到第一个at 4 (记住这个数字)
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
等待完成,恢复成功。
最后:密码用的复杂一些,记得开启日志(损耗1%的性能左右),记得保存好迁移时的数据库文件。