介绍

昨天登自己的网站的时候,发现登不上去,由于是用springboot写的,存放在阿里云轻量云服务器中,所以我去后台查看了一下日志,发现是查不到数据了。

这个时候就发现是数据库出现了问题,然后通过图像化的工具打开了自己的远程数据库,发现自己建的数据库全都不见了,自己排查了半天没有发现是怎么回事,这个时候在别人的提醒下去找了一下阿里的客服,它们为我分配了工程师,工程师帮我确定了排查的范围

最后通过查看二进制文件发现的被国外的黑客攻击了
下面话的意思大概就是让我花钱去把数据买回来不然就将我的数据卖出去,还好数据不是很重要。

并且将我的所有数据库都删除了

mysql的配置

mysql5.6.46 阿里云服务器中的mysql数据库,使用时间不到一年

恢复过程

binlog

什么是binlog

简单通俗来讲,其实就是一个记录所有增删改操作记录的日志。我们可以通过它来对误操作的数据进行恢复,当然还可以用来进行主从数据库的同步操作。

binlog的三种模式:

①statement:记录每一条修改数据的sql。

优点:日志文件比较小,节约io操作,性能较好。

缺点:只记录执行语句,所以还需要保证在主从执行的得到相同的结果。所以准确性差。

②row:保存哪条记录被修改。

优点:准确性强。

缺点:日志文件比较大。

③mixed:兼顾前两者的优点。(我属于这种)

实际操作:

① 查看binlog有没有开启:如果没有开启的话,就彻底凉凉了,几乎没有恢复的机会了,不过可以找攻击者买回数据

在mysql中输入命令:SHOW VARIABLES LIKE ‘log_bin’; 如下所示

可以看到Value是ON
如果没有开启的话,可以参考下面的文章,
https://blog.csdn.net/qq_21996541/article/details/107280382

也可以通过模糊查询,看到更多的信息

③ 查看binlog日志:

通过命令:SHOW MASTER STATUS;可以查看当前是在哪个日志文件中,

通过命令:FLUSH LOGS; 可以截断日志文件,重新定向到新的日志文件中,我们在实际操作的时候,每次操作binlog恢复前,都需要执行下此命令,能够保证之前的日志文件不会再有新的日志在到这个文件中,影响恢复。
执行完之后再次查看的时候就会多一个

然后,可以根据命令:show variables like ‘%datadir%’; 查询出这些日志文件保存的路径

我们在服务器,cd 到这个目录下,这些文件确实存在。但是这些文件是二进制文件,用cat/vi这些命令是无法正常查看的。

这时候就需要我们的mysqlbinlog这个命令登场了,

首先,我们在服务器中输入命令:mysqlbinlog /www/serverl/data/mysql-bin.000020;

如果输入上面的命令报错的话,可以输入下面的命令
输入命令:mysqlbinlog --no-defaults /www/server/data/mysql-bin.000020; 可以看到有如下的一个文件信息。
然我们还可以在mysql中输入命令:SHOW BINLOG EVENTS IN 'mysql-bin.000020';
这样也可以看到binlog中记录的一些事件:

其中,server_id =1,由于我们没有设置,就是表示就是默认主机,Pos我的理解就表示的是一个偏移指针,就类似于一个时间节点,在这个时间节点完成了哪些操作。event_type就表示事件类型,xid事务,query查询,write rows表示插入数据,delete_rows删除数据,都是比较好辨认出来的。

④ 通过binlog进行数据恢复:
通过查看,发现我的数据据库都在mysql-bin.000010这个二进制文件中
在该文件中可以清楚的看到我的数据库被删库前的最后一次操作时间是7月2号 10:35:34
删库前的时间是7月3号 0:20:06,一直到一点的时候才停止。
哎,花40多分钟来攻击一个没有什么利用价值的数据库,感觉有点不值得,而且还是在半夜。
可以看到被删除数据库的名字,有8个数据库,不过对于我来说,比较重要的就一个,有几个是平时测试的时候建的,里面也没有几条数据,
不过就是为了那一个最重要的,我就一定要将它找回来,只要还有一丝。



由于对于对于我来说比较重要的就一个数据库,其它的也没有什么数据,不是很重要,所有就通过恢复指定数据库的方式进行恢复。
通过如下命令生成sql文件,然后通过sql文件进行恢复

mysqlbinlog --no-defaults --database=xiaochengxu_ks --skip-gtids --stop-position=410161 /www/server/data/mysql-bin.000010 > /xiaochengxu_ks.sql

其中 xiaochengxu_ks 是想要恢复的数据库的名字
--stop-position=410161被删库前的位置对应的是at后面接的数字
/www/server/data/mysql-bin.000010 该二进制文件的具体位置
/xiaochengxu_ks.sql 通过二进制文件生成的sql文件的位置

生成对应的sql文件在更目录下

在 MySQL 客户端命令行进入 xaiochengxu_ks 数据库,执行 source /xiaochengxu_ks.sql 恢复数据即可。

也可以设置起止点,但是我觉得没有必要,通过也可以通过时间区间的方式进行恢复

  • 起始定位符
    mysqlbinlog --start-position=249 binlog.000006
  • 结束定位符
    mysqlbinlog --stop-position=249 binlog.000006

总结

以前一直觉得网络安全不是很重要,那是因为没有发生在自己的身上,这几天让我感受到了它的无比重要,发誓以后要重视网络安全这方面,同时加强自身的知识水平,避免再次发生

阿里云中mysql数据库被攻击了,最终数据找回来了相关推荐

  1. c 访问阿里云mysql_本地怎样访问阿里云mysql数据库服务器

    全网最新活动请看下方内容或右侧内容! --------------- 本地怎样访问阿里云mysql数据库服务器,在阿里云上放数据库. 对于大多数小型或初期项目来说,我们可能常用的做法是先将web.数据 ...

  2. mysql数据库搬家,MySQL数据库迁移上云-数据搬家不用愁

    MySQL数据库迁移上云 数据搬"家"不用愁 随着数字化时代的发展,越来越多的企业开始数字化转型.云上数据库能提升对数据库的使用及管理效率,给企业带来了很大经济效益.那么如何安全有 ...

  3. mysql xml_如何在MySQL数据库中使用XML数据

    [IT168 技术文档]通过XML使系统之间的数据交换变得更简单,因为它与编程语言无关,刚引入XML的概念时,是通过一个脚本或应用程序解析XML数据,将其转换为适合于数据库和底层系统的有效格式,后来, ...

  4. mysql java datetime_Java向mysql数据库插入datetime类型数据实例(精)

    在Mysql数据库中日期跟时间有两种: 1.date类型,date类型也就是我们常见的储存yyyy-MM-dd类型的日期,它不能储存时间,也就是只能储存日期, 2.dateitme就是可以储存日期同时 ...

  5. php导出数据库的指定表数据,MYSQL教程mysql数据库导出指定表数据的方法

    <MYSQL教程mysql数据库导出指定表数据的方法>要点: 本文介绍了MYSQL教程mysql数据库导出指定表数据的方法,希望对您有用.如果有疑问,可以联系我们. 导读:linux下导出 ...

  6. python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...

    本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...

  7. 记录mysql数据库被攻击

    记录mysql数据库被攻击 事件 处理过程 异常情况 异常1 异常2 如何避免 参考资料 事件 由于本人比较懒,几个月以前在云服务器上部署了mysql,建了一个demo就没管了.今天突然发现数据库连不 ...

  8. MySQL数据库C接口的数据查询操作示例

    MySQL数据库C接口的数据查询操作示例 命令行操作 (1)建库建表(已有则不用) 连接MySQL服务器,并登录之.选择某个数据库.假设用户在这个数据库下已有一个表了. (2)查询所有数据的方法 SE ...

  9. mysql数据库删除重复的数据只保留一条

    问题引入 假设一个场景,一张用户表,包含 3 个字段:id,identity_id,name. 现在身份证号 identity_id 和姓名 name 有很多重复的数据,需要删除多余数据只保留一条有效 ...

最新文章

  1. android中xml tools属性详解
  2. deep$wide keras
  3. 实践证明m1上面的windows可以说一无是处
  4. [基础]Javascript中的继承示例代码
  5. PCA原理分析和意义(二)
  6. hihoCoder 1257 Snake Carpet(很简单的构造方法)
  7. lr_start_timer,lr_get_transaction_duration,lr_get_transaction_wasted_time函数使用总结
  8. java udp 协议_网络协议 - UDP 协议详解
  9. esxi虚机启动慢的问题
  10. JVM学习-G1回收器
  11. 多个线程对串口读取 modbus_看完这个,如果还不懂Modbus,那您去撞豆腐吧
  12. SQL72 考试分数(一)
  13. oracle关于字符串函数,Oracle字符串处理函数
  14. Java面试锦囊送给你!大厂门槛随便跨!
  15. 用Python做一个基于OCR的微信聊天机器人
  16. 《Dreamweaver CS6 完全自学教程》笔记 第九章:插入多媒体对象
  17. 远程车控怎么玩?来,我教你..
  18. 搜狗泛站怎么做?搜狗泛域名泛目录收录方法
  19. 牛客网---软件开发专项练习 刷题笔记
  20. 智能控制和计算机控制的区别,智能灯光控制系统与传统灯光系统有哪些区别?...

热门文章

  1. SAP系统接口对接历险记
  2. Java入门 冒泡排序(第十二天)
  3. Error during export:Export job failed !
  4. 说一说递归里的return返回!!!
  5. VDI序曲三 桌面虚拟化之远程桌面服务RDS
  6. RH850从0搭建Autosar开发环境【2】- Davinci Configurator配置工程导入DBC与CDD文件
  7. addEventListener()事件监听
  8. 2019该怎么学unity3D游戏开发?
  9. 51单片机的指令周期、机器周期、状态周期、时钟周期
  10. 算法:挑选出100瓶药水中有且仅有1瓶毒药水所需的最少老鼠数量?