mysql 数据恢复 binlog

被删库勒索的一次记录

项目在云服务器运行了一年多了,中间迁移过一次,从阿里迁到华为了。

迁移的时候把数据库文件 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%的性能左右),记得保存好迁移时的数据库文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值