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


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

    勒索表 README FOR RECOVERY DATA内容如下

    README FOR RECOVERY DATA
    All your databases was backed up. You need to email us at xednydy@fexbox.org 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: xednydy@fexbox.org 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看了一下 果然恢复成功了 表结构和数据都恢复的很完美。

  • 相关阅读:
    人工智能模型的微小单元
    什么是浏览器的同源策略(same-origin policy)?它对AJAX有什么影响?
    JS(第九课)深刻的去理解函数.
    [leecode每日一题]面试题 01.09. 字符串轮转
    python基于PHP+MySQL的网上花卉鲜花销售购物网站
    《复盘+》把经验转化为能力
    QT之QPropertyAnimation动画类的介绍
    04.JavaScript(深浅拷贝、异常处理、改变this执行)
    java毕业设计巢院小区疫情管控系统Mybatis+系统+数据库+调试部署
    每日练习------有10个数字要求分别用选择法从大到小输出
  • 原文地址:https://www.cnblogs.com/peachyy/p/17593556.html