MySQL使用DROP TABLE命令删除表怎么恢复?

前言

今天同事勿删除了一个测试环境表,因为刚好在跑重要的数据,重新跑又比较麻烦,所以尝试看能不能通过恢复数据的方式进行数据恢复,如果你也是重要数据一定要切记“不要慌,慌也没用”。
百度过一些例子,哪些例子比较适合表刚刚创建后被删除,就能完全恢复,本篇文章适合那种创建很长时间,表在被删除的。

开始操作

第一步:先连接数据库

mysql -uroot

第二步:在Mysql执行,看有没有开发日志备份

show variables like 'log_bin'
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+

这里返回ON表示开启了,如果是OFF表示关闭,如果是OFF这篇文章可以不用看了,对你没有任何帮助
第三步:继续在MySQL执行,查看日志备份路径

show variables like '%datadir%'
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| datadir       | /usr/local/mysql/data/ |
+---------------+------------------------+

第四步:/usr/local/mysql/data/路径查看列表可以使用ll命令
MySQL使用DROP TABLE命令删除表怎么恢复?
这里可以看到很多,MySQL的日志文件,命名都是由mysql-bin.0000xx,不过这些文件都是二进制的,需要用mysql的工具才能看出来到底是什么。

第五步:查看二进制文件具体SQL

mysqlbinlog -v --base64-output=decode-rows  /usr/local/mysql/data/mysql-bin.0000xx |grep -i -A 50 -B 50  '误删除的表名' >> 0xx.sql

上面这个命令的意思是指定SQL日志的二级制文件,将二级制文件解析成SQL语句,输出到0xx目录,多个自行更改
因为作者这里表创建的时间比较长,所以我不知道具体是在那个文件,只能全部查看,如果你知道那个时间可以查看指定的就好了。
这个文件有规律,就写了一个小java实例用来生成

public static void main(String[] args) {
      for (int i = 1; i <= 48; i++) {
          String format = String.format("%02d", i);
          String s = "mysqlbinlog -v --base64-output=decode-rows  /usr/local/mysql/data/mysql-bin.0000"+format+" |grep -i -A 50 -B 50  '误删除的表名' >> 0"+format+".sql";
          System.out.println(s);
      }
  }

给这些命令复制到shell命令执行,就可以在当前目录下生成0x.sql文件。将文件下载到本地

第六步:查看生成的SQL文件
MySQL使用DROP TABLE命令删除表怎么恢复?
如果是一个文件可以肉眼查看,因为作者生成了48个文件,肉眼看比较麻烦,所有又写了一个java实例,通过io查找命令

public static void main(String[] args) throws Exception {
      //这里输入你自己的表名称
      String tableName = "表名称";

      //这里输入你到处的日志路径
      File file = new File("C:\\Users\\Lenovo\\Desktop\\数据恢复");
      File[] files = file.listFiles();
      for (File file1 : files) {
          BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file1)));
          String line = null;
          System.out.println("<<<<<<<<<<<<<<<< 正在读取"+file1.getName()+"文件 >>>>>>>>>>>>>>>>");
          while ((line = br.readLine()) != null) {
              if(line.indexOf(tableName) == -1){
                  continue;
              }
              System.out.println(line+";");
          }

      }
  }

这段代码java执行成功后,控制台会有很多SQL语句,数据无价,最好还是肉眼筛选,看是否有需要的SQL语句数据,将数据复制到数据库执行
第七步:执行SQL
这个就不多说了,相信你也会了~!

原文链接:https://www.cnblogs.com/lin168/p/17283715.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL使用DROP TABLE命令删除表怎么恢复? - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • 关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误

    关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误的攻略如下: 1. 问题概述 当我们授权一个用户访问MySQL数据库中的information_schema时,有时候会遇到错误提示: ERROR 1044 (42000): Access denied for user ‘user_name’@’%’ t…

    MySQL 2023年5月18日
    00
  • mysql 注入报错利用方法总结

    下面是关于”mysql 注入报错利用方法总结”的完整攻略,包括步骤和两条示例说明。 1. 概述 MySQL注入是一种常见的web安全漏洞,攻击者可以通过利用这个漏洞,实现绕过身份验证、将恶意代码插入到网站数据库等等攻击目的。 根据注入结果是否能够在web页面上输出,可以将MySQL注入常见的方法分为两类:基于布尔盲注和基于报错注入。本文重点介绍报错注入的利用…

    MySQL 2023年5月18日
    00
  • MySQL8.0.32的安装与配置超详细图文教程

    让我来为你详细讲解“MySQL8.0.32的安装与配置超详细图文教程”的完整攻略。 准备工作 在开始安装前,你需要先准备以下的工作: 下载MySQL8.0.32安装包。你可以从MySQL官网上下载对应的安装包。下载好后将其解压到一个你喜欢的目录中。 确保已经安装了Visual C++ Redistributable for Visual Studio 201…

    MySQL 2023年5月19日
    00
  • mysql织梦索引优化之MySQL Order By索引优化

    MySQL Order By 索引优化 在对MySQL数据库进行数据查询时,Order By操作常常需要花费较长时间,因此我们需要对MySQL数据库进行索引优化,减少查询时间的同时,提高查询效率。本文将详细讲解MySQL Order By索引优化的各种情况和方法,以减少数据库查询的时间复杂度。 为什么需要优化MySQL Order By查询语句 Order …

    MySQL 2023年5月19日
    00
  • mysql server is running with the –skip-grant-tables option

    当我们使用MySQL数据库时,有时候可能会遇到”mysql server is running with the –skip-grant-tables option”的提示信息。这种提示信息的意思是MySQL服务器正在运行时跳过了授权表。通常这种情况发生在我们忘记MySQL的root密码时,因为授权表的内容包括用户名和密码。 针对这种情况,整理了以下针对U…

    MySQL 2023年5月18日
    00
  • 一步步教你MySQL查询优化分析教程

    一步步教你MySQL查询优化分析教程 MySQL查询优化是提高数据库性能和响应时间的关键。本教程将一步步教你MySQL查询优化的过程。 步骤一:执行慢查询日志 为了知道哪些查询需要优化,我们需要先找出哪些查询运行缓慢。在MySQL中有一个非常有用的工具叫做慢查询日志。它会记录所有执行时间超过一定时间阈值的查询。可以通过以下步骤来启用慢查询日志: 打开my.c…

    MySQL 2023年5月19日
    00
  • 读SQL进阶教程笔记12_地址与三值逻辑

    1. SQL和数据库都在极力提升数据在表现层的抽象度,以及对用户隐藏物理层的概念 2. 关系模型是为摆脱地址而生的 2.1. “地址”不仅包括指针操作的地址,还包括数组下标等 3. 一个优雅的数据结构胜过一百行杂耍般的代码 3.1. 精巧的数据结构搭配笨拙的代码,远远好过笨拙的数据结构搭配精巧的代码 4. 编程中泛滥的地址 4.1. 我们可以使用的只有冯·诺…

    MySQL 2023年4月19日
    00
  • 为什么MySQL分页用limit会越来越慢

    MySQL分页用limit会越来越慢的原因是因为limit的语句中,MySQL需要对查询结果集做一个偏移操作,直接跳过偏移量(Offset)条记录,再返回指定数量(Limit)的记录。但是,MySQL并没有对偏移量前的所有记录进行跳过操作,而是将它们全部加载到了内存中,再返回指定的记录,这样导致后面翻页查询时,MySQL仍然需要加载所有偏移量前的所有记录,降…

    MySQL 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部