首页 > 数据库 >mysql根据mysqlbinlog恢复找回被删除的数据库

mysql根据mysqlbinlog恢复找回被删除的数据库

时间:2023-07-31 15:35:19浏览次数:98  
标签:rw polkitd 找回 数据库 ----- mysql input mysqlbinlog

年初和朋友一起做了个项目,到现在还没收到钱呢,今天中午时候突然听说之前的数据库被攻击了,业务数据库全部被删除。看有没有什么办法恢复,要是恢复不了,肯定也别想拿钱了吧?

README FOR RECOVERY DATA
All your databases was backed up. You need to email us at [email protected] to recover your data. If the payment is not received within 48 hours, all your data will be deleted and used for our purposes
BITCOIN adress for pay bc1q8hsych64d5l79s8sztl3x7xj4u0rerltug9zcu 0,008 BTC
Bitcoin can be purchased with Alipay from: CoinCola: https://www.coincola.com/?lang=zh-HK BitValve: https://www.bitvalve.com/buy-bitcoin/alipay
Or another way: MoonPay: https://www.moonpay.com/buy Paybis: https://paybis.com/ Changelly: https://changelly.com/buy
After paying write to us in the mail with your DB IP: [email protected] and you will receive a link to download your database dump.

打开数据库后就看到只剩下mysql和README FOR RECOVERY DATA数据库,自己创建的数据库已被删除,顺着打开README数据库中仅有的一张表README FOR RECOVERY DATA。大概意思就是您的数据库已被攻击者备份了 请48小时内用比特币支付。如果48小时内没有付款 数据将被删除。这不是赤裸裸的上演了互联网勒索嘛。

观察BinLog日志文件

进入mysql数据存放目录

-rw-r----- 1 polkitd input        56 Jan  5  2023 auto.cnf
-rw-r----- 1 polkitd input   2983124 Jan  5  2023 binlog.000001
-rw-r----- 1 polkitd input       157 Jan  5  2023 binlog.000002
-rw-r----- 1 polkitd input       157 Jan  5  2023 binlog.000003
-rw-r----- 1 polkitd input      2235 Jan  5  2023 binlog.000004
-rw-r----- 1 polkitd input       180 Jan  5  2023 binlog.000005
-rw-r----- 1 polkitd input 153788296 Jul 31 14:40 binlog.000006
-rw-r----- 1 polkitd input        96 Jan  5  2023 binlog.index

能看到binlog最新的一个文件binlog.000006 貌似还没有被删除。尝试用日志还原试一试

ps:这里如果binlog文件都被删除了的话 估计真不好恢复了。

基于mysqbinlog工具恢复数据

mysqlbinlog工具是把二进制的binlog转换为文本格式,通常情况下就会用到mysqlbinlog 日志管理工具。

在mysql安装目录下 bin目录中正常会有一个工具命令行叫mysqbinlog 如果是跑在docker中的mysql可能是没有这个命令的。需要从别的地方复制过来,复制数据库命令版本需要和当前恢复的数据库版本一致。比如我这里就是因为安装在docker中的数据库,没有mysqlbinlog工具。

先从官网下载数据库包 解压后 ,把bin中的mysqlbinlog复制到docker中进行执行。 如果有mysqlbinlog工具跳过此步。

Usage: ./mysqlbinlog [options] log-files
-d,-database-name:指定数据库名称,只列出指定的数据库相关操作。
-o,-offset=#:忽略掉日志中的前n行命令。
-r,--result-file=name:将输出的文本格式日志输出到指定文件。
-s,--short-form:显示简单格式,省略掉一些信息。
-set-charset=char-name:在输出为文本格式时,在文件第一行加上 set names char-name,这个选项在某些情况下装载数据时非常有用。
--start-datetime=name,--stop-datetime=name: 指定日期间隔内的所有日志。
--start-position=#, --stop-position=#:指定位置间隔内的所有日志。

常用就参数项就以上几个。

这里假定我们恢复到binlog.000006文件中的内容。

mysqlbinlog binlog.000006 > /root/binlogtxt.sql

执行完成之后 /root/binlogtxt.sql文件中上百兆的语句。我想大概率是妥了。

恢复到数据库中。

mysql -uroot -p 
source /root/binlogtxt.sql

像我这里的场景是因为数据库被drop了。恢复的时候需要注意 只需要恢复到drop前一步就行。如果全部日志恢复后发现还是没有数据库,可能是恢复后又自动被日志中drop语句删除了。

怎么知道恢复到哪一步之前呢?

1、可以打开/root/binlogtxt.sql文件 看到drop database语句后就注释了。

2、./mysqlbinlog 导出文本的时候 设置时间段或者position位置。

打了navicat看了一下 果然恢复成功了 表结构和数据都恢复的很完美。

标签:rw,polkitd,找回,数据库,-----,mysql,input,mysqlbinlog
From: https://www.cnblogs.com/peachyy/p/17593556.html

相关文章

  • mysqldump 导出与导入
    导出数据库脚本(export.sh):#!/bin/bash#数据库连接信息DB_HOST="localhost"DB_USER="root"DB_PASSWORD="password"DB_NAME="your_database_name"#导出表结构和表数据到文件mysqldump-h$DB_HOST-u$DB_USER-p$DB_PASSWORD--no-data--skip-loc......
  • docker-mysql(集群)
    第一步:安装docker+并获取mysql镜像第二步:运行master的mysql容器dockerrun-id\--name=mysql_master\-p3307:3306\-v$PWD/mysql-master/conf:/etc/mysql/conf.d\-v$PWD/mysql-master/logs:/logs\-v$PWD/mysql-master/data:/var/lib/mysql\-eMYSQL_ROOT_PASSWO......
  • mysql的索引机制
    索引的概念索引是一种特殊的数据。保存的是其他数据的位置,查找数据时先查找索引查询数据,提高查找效率。索引是越多越好吗?不是索引的优缺点优点:​ 1.提高查询效率缺点:​ 1.占用额外的磁盘空间​ 2.创建索引需要较长时间​ 3.索引需要维护索引的类型......
  • mongodb和mysql的优缺点
    MongoDB和MySQL的优缺点对比引言在现代软件开发中,数据库是必不可少的一部分。MongoDB和MySQL是两种常见的数据库管理系统(DBMS)。本文将对它们的优缺点进行对比,帮助读者选择适合自己需要的数据库系统。MongoDBMongoDB是一个基于文档的NoSQL数据库,使用JSON格式存储数据。它的特点......
  • mogdb和mysql 插入效率
    mogdb和mysql插入效率比较在现代软件开发中,数据库是一个不可或缺的组成部分。常见的数据库有多种选择,其中包括MogDB和MySQL。本文将重点讨论这两个数据库在插入数据时的效率比较,并通过代码示例来进一步说明这一点。MogDB简介MogDB是一种基于开源的分布式关系型数据库管理系统。......
  • mysql 字符串包含某个字符
    MySQL字符串包含某个字符在MySQL中,我们常常需要对字符串进行各种操作,包括判断一个字符串是否包含某个字符。本文将介绍如何使用MySQL语句来判断字符串是否包含某个字符,以及提供相应的代码示例。使用LIKE语句MySQL中提供了LIKE语句来判断一个字符串是否包含某个字符。LIKE语句是......
  • mysql 字段加减
    MySQL字段加减操作详解在MySQL数据库中,我们经常需要对字段进行加减操作,例如累加某个字段的值、减去某个字段的值等。本文将详细介绍在MySQL中如何进行字段的加减操作,并提供几个代码示例。1.基本的加减操作MySQL提供了UPDATE语句来更新表中的数据,我们可以使用该语句进行......
  • mysql 字段改名
    MySQL字段改名在开发过程中,有时候需要对MySQL数据库中的字段进行改名。字段改名可以帮助我们更好地命名字段,提高代码的可读性和维护性。本文将介绍如何使用SQL语句和ALTERTABLE语句通过代码示例进行MySQL字段改名。什么是字段改名字段改名是指将数据库表中的某个字段的名称修改......
  • mysql 自增序列加前缀
    MySQL自增序列加前缀在MySQL数据库中,自增列是一种非常有用的特性,它可以为每一行记录自动生成唯一的标识符。然而,有时我们需要给自增列添加一个前缀,以便更好地组织和管理数据。本文将详细介绍如何在MySQL中实现自增序列加前缀的方法,并提供相应的代码示例。1.创建数据表首先,我们......
  • mysql 子查询插入
    MySQL子查询插入的实现概述在MySQL中,可以使用子查询来实现插入操作。子查询是指在一个查询语句中嵌套另一个查询语句,可以将子查询的结果作为插入的值。本文将教你如何使用MySQL子查询来实现插入操作。步骤下面是实现MySQL子查询插入的步骤:步骤描述1编写子查询语句......