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 Aborted connection告警日志的分析

    这里是MySQL Aborted connection告警日志的分析攻略: 1. 理解Aborted Connection 当MySQL连接在执行一个操作时,如果客户端突然不响应或者断开连接,这会使得MySQL服务端出现一个Aborted Connection告警日志。这个告警日志表明了MySQL连接在执行过程中发生异常情况,并给出异常的原因和导致原因的连接…

    MySQL 2023年5月18日
    00
  • MySQL修改数据库(ALTER DATABASE语句)

    MySQL中修改数据库的语句是ALTER DATABASE,它允许用户更改数据库的名称和字符集。下面,我们将深入解析ALTER DATABASE的使用方法。 修改数据库名称 要修改数据库的名称,可以使用以下语法: ALTER DATABASE old_db_name RENAME TO new_db_name; 其中,“old_db_name”是要更改名称的…

    MySQL 2023年3月9日
    00
  • Mysql索引覆盖如何实现

    这篇“Mysql索引覆盖如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mysql索引覆盖如何实现”文章吧。 1.什么是覆盖索引 通常情况下,我们创建索引的时候只关注where条件,不过这只是索引优化的一个方向。优秀的索引设计应该纵观整个…

    MySQL 2023年4月11日
    00
  • MySQL 出现错误1418 的原因分析及解决方法

    MySQL 出现错误1418 的原因分析及解决方法 错误描述 在使用 MySQL 进行数据操作时,有可能会出现以下错误提示: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary …

    MySQL 2023年5月18日
    00
  • 深入浅析Mysql联合索引最左匹配原则

    MySQL联合索引是一种通过组合多个列来优化查询性能的索引类型。其中,联合索引的最左匹配原则是指,索引能够被优化使用的部分内容必须是联合索引从左到右的前缀。在本文中,我们将深入浅析Mysql联合索引的最左匹配原则,以及如何优化查询性能。 什么是联合索引最左匹配原则? 联合索引最左匹配原则是指,在使用联合索引进行查询时,只有从左到右的连续列可以被索引使用。换言…

    MySQL 2023年5月19日
    00
  • MySQL的一条慢SQL查询导致整个网站宕机的解决方法

    当网站中出现慢SQL查询导致网站宕机的情况时,我们可以采用以下方法进行解决: 1. 发现问题 在网站发生宕机的状况下,首先需要我们去查找原因,可以通过以下方法查找: 查看MySQL的慢查询日志 在MySQL中,我们可以开启慢查询日志,记录下执行时间超过指定时间的SQL语句。通过查看慢查询日志,我们可以发现那些执行时间特别长的SQL语句,从而快速定位问题。 如…

    MySQL 2023年5月19日
    00
  • 大幅优化MySQL查询性能的奇技淫巧

    首先介绍几条优化MySQL查询性能的奇技淫巧: 1. 创建合适的索引 索引能够提高查询速度,但是不是所有的列都适合建立索引。一般建议给经常作为查询条件的列建立索引,例如主键、外键、频繁用于查询的字段等。过多的索引可能会导致写入降速,所以需要选择适当的列建立索引。 2. 优化查询语句 查询语句的优化也是提高查询性能的重要手段。例如使用JOIN语句的时候一定要注…

    MySQL 2023年5月19日
    00
  • mysql连接错误2013的问题及解决

    下面是“mysql连接错误2013的问题及解决”的完整攻略: 问题描述 在使用mysql的时候,有时会出现连接错误2013,如下所示: ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0 这…

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