背景在上一篇文章里面已经提过了。

现在面临的问题是nextcloud没有mysql数据库,用不起来了。

因为文件没丢,一种方法是启动新的mysql数据库,把文件重新提交一次。

为了程序员的面子,没有选择这么没技术含量的方法。我想通过恢复mysql数据库来解决这个问题。

恢复mysql数据库

于是,在mysql目录里面找找看,发现了一堆binlog文件。上网查了一下,binlog文件里面好像有记录mysql的操作,可以用来恢复数据库。

查看binlog:# ll -th binlog.*

先把最近的binlog转成SQL:

mysqlbinlog /var/lib/mysql/binlog.000011 > /var/lib/mysql/11.sql

打开11.sql,里面果然有被黑的记录。创建了一个“PLEASE_READ_ME_VVV"的数据库和"WARNING"的数据表。

看来有希望。

把所有binlog都转成SQL,查看什么时候创建nextcloud数据库的。

# grep -i  "create database" *.sql

注:需要找到第一次创建nextcloud库的记录,这个记录会包含建表操作,否则恢复数据时会报如下数据表找不到的错误:

顺便找一下,什么时候被删除数据库的。

# grep -i  "drop database" *.sql

查看11.sql,找到黑客入侵前的日志,只恢复到这个时间点的数据(之后的数据也恢复的话,相当于又删除一遍数据)

只转换部分binlog的话,可以使用--start-position 和 --stop-position来界定,参数的值就是上图红框处,# at 82015的值。

或者也可以全部转换成SQL后,手动将SQL中不要的操作删除掉。

# mysqlbinlog --stop-position=82015 /var/lib/mysql/binlog.000011 > /var/lib/mysql/11_1.sql

根据上面的grep结果,我只需要恢复5~10的全部LOG,以及11的部分LOG(删除黑客操作的部分)。

将5~11的binlog转换成SQL准备好,就可以开始恢复了。

恢复过程:

1,删除nextcloud仓库以及PLEASE_READ_ME_VVV仓库;

mysql> drop database `nextcloud`;

mysql> drop database `PLEASE_READ_ME_VVV`;

2,加载5~10和11_1的SQL文件。

mysql> source /var/lib/mysql/5.sql;

。。。

恢复完成后,查看一下nextcloud仓库,数据表已经恢复回来了。哦耶!

随着数据库的恢复,心情也逐渐畅快起来,就是不能向恶势力低头嘛,哈哈哈。

----------------------------------------------------------------------------------------------------------------------------------

本来,至此,nextcloud应该就可以直接恢复成功了。然而。。。又出幺蛾子了。。。。

nextcloud还是显示"Internal server error" ,查看日志发现,错误变成了mysql访问拒绝。

这个地方报错原因是密码错误。因为nextcloud在之前重新配置过数据库导致的。参考:记一次mysql数据库被勒索(上)

真的是手贱了。。。这个问题,又费了九牛二虎之力才找到原因,好在最后也恢复成功了。

这个留在下篇再写吧。

最新文章

  1. Android Saving Data(一)
  2. DES加密解密
  3. Map集合概述
  4. 一致性hash介绍
  5. c++工程vs导入工程时发生LNK1207
  6. DNS劫持 DNS污染
  7. 【转】 wpf系列-入门
  8. 浅谈C中的指针和数组(五)
  9. 测试工作中ADB命令实战
  10. asp.net mvc源码分析-Route的GetRouteData
  11. SharePoint 2013: The "New Web Application" button is disabled is the central administration
  12. GC参考手册 —— GC 算法(实现篇)
  13. ubuntu18.04新体验
  14. [LeetCode] Design HashSet 设计HashSet
  15. Java8自定义函数式编程接口和便捷的引用类的构造器及方法
  16. AttributeError: 'LoginForm' object has no attribute 'is_bound' , object has no attribute 'is_bound'
  17. 只知道ajax?你已经out了
  18. 小学四则运算APP 第一个冲刺 第八天
  19. H5入门
  20. bzoj2152 (点分治)

热门文章

  1. 用Python爬取双色球开奖信息,了解一下
  2. TSGCTF-web Beginner's Web (js内置方法__defineSetter__)
  3. Spring+hibernate无法执行更新操作
  4. try{}catch的隐藏(如何优雅的实现异常块)
  5. PHP wordwrap() 函数
  6. PHP strnatcmp() 函数
  7. 配置ssh互信
  8. SparkBench安装使用入门
  9. springMVC请求路径 与实际资源路径关系
  10. Efficient Knowledge Graph Accuracy Evaluation 论文笔记