遭遇勒索病毒数据库被删除之后

昨天发现网站不能访问,以为只是简单的报错,看看日志,解决一下就行了。就没当回事的打开日志,开始查看,看了一眼突然懵了,怎么回事,原本运行的好好的数据库找不到了,我半信半疑的想着我插入数据失败不至于把数据库干掉了吧。打开mysql,连上远程,刷新数据库,果然数据找不到了。

非常的郁闷,显示经历了插入失败,接着数据库不翼而飞!但又发现多了一个没见过库,打开该库里面只有一张表,表里面写着:

To recover your lost Database and avoid leaking it:
        Send us 0.04 Bitcoin (BTC) to our Bitcoin address 1Msg3ribW4CpEUgCJwdLVhN4p3fuHWpXLy and contact us by Email(dbrecovery@anonmail.to) with your Server IP or Domain name and a Proof of Payment. Your Database is downloaded and backed up on our servers.Backups that we have right now: java_stu. Any email without your server IP Address or Domain Name and a Proof of Payment together will be ignored. 
        If we dont receive your payment in the next 10 Days, we will make your database public or use them otherwise.

原来遭遇了可恶的比特币勒索病毒,这事竟然发生在了我的身上!原来这距离我们这么近,还以为它只是出现在报道上而已。数据库是没了,数据也没了,于是给服务器商打电话, 问该怎么解决,或者恢复一下库吧。然而客服的语气很同情你,但是我们也没办法,建议你做好备份,如果有开启binlog日志,可尝试数据恢复等等之类。显然他们不会给你找回库。也应该想想自己问题,用了多少年的数据库密码了,依然123456,自身安全意识薄弱,没有一点防护,应对突发问题补救措施,是造成这次问题的关键。于是网上查查,这个病毒是否攻破了,如何解密我的数据库,一无所获。只好另想他法了。

上面有提到开启binlog,可进行数据库恢复,感觉可以试试,有网上查了查,如何binlog恢复。确实找到了相关的文章。有的还挺详细。由于每个人的情况不一,但都是要恢复被删的库,我就写写,我是如何一点点的恢复的吧!

 1.首先查看你的数据是否开启了binlog,登录mysql

>use mysql;

>show variables like 'log_%';

 

如果你没有开启,那你就没办法通过它恢复了,数据库还有个有ibdata1,至于使用这个怎么恢复,请大家自行百度啦。

你也可以去开启,以备下次:

修改mysql数据库的配置文件,windows是my.ini文件,打开该文件,在[mysqld] 区块设置/添加

log-bin=mysqlinit

确认是打开状态(值 mysqlinit 是日志的基本名或前缀名);设置完成之后需要重启mysql服务才能生效。

 

2、查看所有binlog日志列表

>show master logs;

然后就是看你要从哪个文件开始恢复了,当mysql重新启动,它就会重新生成一个binlog文件。所以你就要找要从哪里开始恢复了。恢复的时候还要注意你添加了主键外键问题,这在恢复的时候会出现报错,导致恢复暂停,我这里是整个库的恢复。

首先我重新创建了同样名字的数据库,然后再生成表,你只需要找回数据就行了,当然你也可以一个一个文件的都执行一遍,整个库也就回来了,也不用创建数据库,和表了。这期间你需要找到你你从那一点开始创建的库,从哪一点结束执行。

3.查看binlog文件的内容

>show binlog events in 'binlog.000012';

找到了数据库被删的那个地方,需要注意的有posend_log_pos,info表示执行的语句。可以根据执行的语句来查询或者是现有数据库最后执行的id等关键字来查找到对应的info,记录下相应的end_log_pos。为了保证恢复时没问题,我舍弃了两个insert,从4381689作为结束!再就是找到你从哪里开始恢复了,如果你想省事,不想创建表:那就找到开始的地方再记下一个end_log_pos。然后我们就开始恢复吧。

 

4、使用mysql的工具mysqlbinlog读取binlog日志

进入mysql安装目录下的bin文件夹,执行:mysqlbinlog 命令如果执行失败,可以带上路径执行。 这里由于我创建好了数据库和表,所以只需要找回数据就行了,预估了一下我从文件9开始恢复:

>/usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog.000009  | /usr/local/mysql/bin/mysql -uroot -p123456 java_stu -v -f

当然,如果你的有开始start_log_pos话,你需要这样写:

>/usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog.000009  --start-position="3344" | /usr/local/mysql/bin/mysql -uroot -p123456 java_stu -v -f

直到执行到结束的end_log_pos:

>/usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog.000012 --stop-position="4381689" | /usr/local/mysql/bin/mysql -uroot -p123456 java_stu -v -f

 

执行完毕,你的数据也就完全恢复了。感觉这过程有小心,有惊险,有惊喜,觉得一步步就是希望,有恐自己遇见个决绝不了的错误,最后的希望之火也灭掉了。

 

最后补充知识:

 

1、常用binlog日志操作命令

(1).查看所有binlog日志列表

mysql> show master logs;

(2).查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值

mysql> show master status;

(3).刷新log日志,自此刻开始产生一个新编号的binlog日志文件

mysql> flush logs;

注:每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;

(4).重置(清空)所有binlog日志

mysql> reset master;

 

转载:http://javasourceshare.cn/article/16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值