利用mysql物理文件(*.ibd,*.frm)回复数据

前言

服务器突然连接不上,联系云客服,云客服发现是重启卡住了,经过他们排查,是服务器中了勒索病毒,该病毒就是在服务器上执行脚本,把文件全部进行加密,然后友好的给你留下一个文件。(QTMD)

经过排查,我这台服务器影响的有两个服务,一个tomcat服务,一个springboot服务和一个msyql数据库。服务器上的mysql运行文件都被加密过,想重新启动是不可能了,还好最后发现,mysql数据的物理文件没有被处理过(看来勒索病毒处理的还是有漏洞呀),看来数据恢复还有希望;另外一个服务上传的图片全部被加密,这个也是没办法恢复了。

恢复mysql数据

  1. mysql本地文件,大概是这个样子,一个库一个目录,目录下面就是该库的物理文件 db.opt存的信息是该库的字符集和字符集排序规则 *.frm是表结构信息 *.ibd是表数据信息 这个接口是innodb引擎的接口,myisam结构好像不太一致,想具体了解的自行了解。
  2. 将所有文件下载到本地。
  3. 自己本机mysql上创建一个新的库
  4. 我是有测试环境,所以直接把测试环境的表结构同步过来。
  5. 打开本机mysql新库的物理地址,可以看到目录和服务器上全部一致。
  6. 分离表空间,使当前.ibd的数据文件和.frm分离。 ALTER TABLE 表名 DISCARD TABLESPACE;
  7. 这时候查看本地目录,该表的ibd文件已经成自动删除
  8. 将服务器上下载的idb文件复制过来,重新建立idb的链接。(要注意复制过来之后权限和用户组要和之前保持完全一致) ALTER TABLE 表名 IMPORT TABLESPACE;
  9. 至此,该表的数据已经回复完成,多表可利用excel批量处理

经验与反思

  1. 数据库和图片的静态文件尽量少放在服务器上,rds防护肯定比自己服务器上搭建msyql好点。(数据更安全点)
  2. 这次被攻击也不知道是不是因为log4j2漏洞导致(持怀疑态度,毕竟是漏洞爆出之后,一周左右被攻击,而且服务确实用了log4j2)
  3. 数据库备份可以利用*.idb文件和表结构进行备份(至少我觉得可行,主要是重新建立idb链接的速度很快。)
经验分享 程序员 微信小程序 职场和发展