参考文章

https://juejin.cn/post/6844903879251869710

背景

2021-11-25

1、访问网站发现,提示数据库不存在

image-20211126101833520

2、到数据库里一看,数据库不存在

以下数据库已被删除:。 我们有完整的备份。 要恢复它,您必须向我们的比特币地址bc1qmnzkd4y5u5eanj87h2phlhwap4hzl6au7990ge支付0.006比特币(BTC)。 如果您需要证明,请通过以下电子邮件与我们联系。 wong49@tutanota.com 。 任何与付款无关的邮件都将被忽略!

造成原因

1、登陆服务器发现只有数据库被删除,网站文件没有变化,扫描也未发现后门,猜测对方通过数据库爆破进来的

为了能远程调试,把监听地址改成了0.0.0.0,造成了这个问题,修改为本地监听

image-20211126103809968

查找日志

1、查看是否打开musql的binlog,log_bin是ON说明mysql开启了binlog,下面是binlog路径

  SHOW VARIABLES LIKE 'log_bin%';

image-20211126102204131

2、binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undo log是完全不同的日志;其主要是用来记录对mysql数据更新或潜在发生更新的SQL语句,并以"事务"的形式保存在磁盘中;

cd /var/lib/mysql

其中mysql-bin.000*就是binlog文件

image-20211126102357910

3、使用命令打开最新的binlog文件,文件内容一般都很多,可以输出到文本查看,发现对方是直接把数据库drop掉了

mysqlbinlog mysql-bin.000732 > 1.txt

image-20211126102701685

mysql恢复

使用binlog恢复文件(以下步骤未尝试,需要自行尝试)

原理就是binlog保存了你所有的数据库操作,相当于你重新执行了在执行drop之前所有的增删改查。

mysqlbinlog --start-datetime='20xx-01-01 00:00:00' --stop-datetime='20xx-06-24 10:30:00' mysql-bin.000001 |  mysql -h x.x.x.x -u root -p -P 3306

其中

start-datetime=为你想恢复的起始位置,一般为刚创建数据库的时候

stop-datetime=为被删库之前的时间,只要是被删库之前就可以

mysql-bin.000001为要恢复的binlog文件,将所有相关的mysql-bin都写上,以逗号隔开

mysql -h x.x.x.x -u root -p -P 3306 为你的远程数据库地址

x.x.x.x为远程ip

root为用户名

3306为端口号

上一篇