记一次mysql数据库被勒索(中)
背景在上一篇文章里面已经提过了。
现在面临的问题是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数据库被勒索(上)
真的是手贱了。。。这个问题,又费了九牛二虎之力才找到原因,好在最后也恢复成功了。
这个留在下篇再写吧。
记一次mysql数据库被勒索(中)的更多相关文章
- 记一次mysql数据库被勒索(下)
背景: nextcloud的mysql数据库被黑,删库勒索.参考:记一次mysql数据库被勒索(上) mysql数据库恢复成功,nextcloud还是无法连接.参考:记一次mysql数据库被勒索(中) ...
- 记一次mysql数据库被勒索(上)
家里搞了台旧电脑做NAS,安装了nextcloud,选择了mysql做为数据库. 当时也没有想太多,mysql数据库密码随便设置了个123456,用的一切正常. 然后,听说可以找电信申请换个公网IP的 ...
- 初码-Azure系列-记一次MySQL数据库向Azure的迁移
初码Azure系列文章目录 还在继续给客户迁移不同的系统到Azure,这一次是一个系统的MySQL数据库要迁移,将迁移过程记录一下 原系统环境 数据库版本:MySQL Community Editio ...
- MySql数据库在NodeJS中简单的基本操作
阅读目录 一:连接数据库 二:数据的增删改查操作 2.1 数据库新增和查询数据 2.2 获取该数据的主键值 2.3 多语句查询 回到顶部 一:连接数据库 const mysql = require(' ...
- 记一次Mysql数据库Kill完之后启动不起来的解决方案
在Mysql运行的时候,有时候会stop不了,这时候我们就会想直接把他的进程kill掉. 但是,有时候kill完了之后,在去start它就会直接抛异常了... ERROR! The server qu ...
- 记一次mysql数据库失而复得过程
背景: 由于是自己买的vps搭建的博客,用的是军哥的一键lnmp源码编译安装的,文章也就几篇,对备份并不太重视,想着等服务器快到期的时候备份一下不就行了. 后来在该服务器上测试lnmp分别编译编译安装 ...
- 记一次MySQL数据库拒绝访问的解决过程
问题背景 用wordpress搭博客,数据库采用MySQL.为了调试方便,创建账户my_account ,允许它从任意主机访问数据库. CREATE USER `my_account`@'%' IDE ...
- mysql数据库binary log中的事件到底是什么?
需求描述: 最近看mysql备份恢复的时候,基于时间点恢复,提到了binary log中存的是"事件" 那么到底什么是事件呢 概念解释: binary log中存的是事件(even ...
- Spring Boot项目中MyBatis连接DB2和MySQL数据库返回结果中一些字符消失——debug笔记
写这篇记录的原因是因为我之前在Spring Boot项目中通过MyBatis连接DB2返回的结果中存在一些字段, 这些字段的元素中缺少了一些符号,所以我现在通过在自己的电脑上通过MyBatis连接DB ...
随机推荐
- C++语法小记---同名覆盖
同名覆盖 子类中的同名成员会覆盖父类中的同名成员,但是在内存中仍然存在,只是无法直接访问,需要加上域名才能访问 子类中的同名函数会覆盖父类中的函数,复写是同名覆盖的一种特殊情况,只要不是多态场景,复写 ...
- INS(Instagram)如何绑定谷歌二次验证码/谷歌身份验证/双重认证?
1.打开Ins,找到双重验证界面 打开Ins,点击右上角“三”-“设置”-“安全”-“双重验证”-“选择安全验证方式”-“身份验证应用”-“立即开启”-“手动设置”-“复制密钥”-“输入验证码” ...
- ajax快速入门
一.ajax简单入门 1.Ajax的实现步骤 // 1.创建ajax对象var xhr = new XMLHttpRequest();// 2.高数ajax请求地址及请求方式//第一个参数就是请求方式 ...
- 如何消灭飞机的“黑色十分钟”,AI来帮忙
近年来,“AI的应用和落地”逐渐成了具化的关键词,它和很多事物很多行业结合在一起,形成了奇妙的“化学反应”.例如,在日常生活中,AI可以推送我们喜欢的新闻或视频,可以在拍照的时候识别场景提升照片的美感 ...
- time strptime()方法 时间操作
Python time strptime()方法 时间操作 描述 Python time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组. 语法 strptime()方法语 ...
- Python游戏编程入门 中文pdf扫描版|网盘下载内附地址提取码|
Python是一种解释型.面向对象.动态数据类型的程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Python开发精彩游戏所需的[]为重要的该你那.本书不 ...
- Python创建字符串
Python创建字符串: 一般情况下可以使用 ' 或 " 创建字符串 或 使用引用字符串变量 或 字符串表达式. # 字符串的创建 # 使用 ' 或 “ 进行创建 strs = 'ABCDE ...
- PHP preg_match_all() 函数
preg_match_all 函数用于执行一个全局正则表达式匹配.高佣联盟 www.cgewang.com 语法 int preg_match_all ( string $pattern , stri ...
- PHP image_type_to_extension - 获取图片后缀
image_type_to_extension — 根据指定的图像类型返回对应的后缀名.高佣联盟 www.cgewang.com 语法 string image_type_to_extension ( ...
- day20:正则表达式
单个字符的匹配 findall(正则表达式,字符串) 把符合正则表达式的字符串存在列表中返回 预定义字符集(8) \d 匹配数字 \D 匹配非数字 \w 匹配数字字母下划线 \W 匹配非数字或字母或下 ...