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

yizhihongxing

前言

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

开始操作

第一步:先连接数据库

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中的日期时间类型与格式化方式

    MySQL中的日期时间类型和格式化方式是MySQL数据库中非常重要的一部分,它与数据库中的数据存储有关系,并且在进行查询运算、筛选和展示数据时,也有着非常重要的作用。在本篇文章中,我们将详细介绍MySQL中日期时间的类型和格式化方式,以及使用场景和示例说明。 日期时间类型 MySQL中日期和时间类型包括时间戳(TIMESTAMP)、日期(DATE)、时间(T…

    MySQL 2023年5月19日
    00
  • MySQL千万级大数据SQL查询优化知识点总结

    MySQL千万级大数据SQL查询优化知识点总结 MySQL是常用的开源关系型数据库管理系统,随着数据量的增加,SQL查询性能的优化变得越来越重要。本篇文章将会总结MySQL千万级大数据SQL查询优化的知识点。 数据库索引的优化 索引是关系型数据库中非常重要的优化手段,优秀的索引设计可以提高查询性能。以下是提高索引性能的几种方法: 1. 压缩索引 索引对于I/…

    MySQL 2023年5月19日
    00
  • mysql中key 、primary key 、unique key 与index区别

    CREATE TABLE pre_forum_post ( pid int(10) unsigned NOT NULL COMMENT ‘帖子id’, fid mediumint(8) unsigned NOT NULL default ‘0’ COMMENT ‘论坛id’, tid mediumint(8) unsigned NOT NULL defaul…

    MySQL 2023年4月13日
    00
  • java.sql.SQLException: No value specified for parameter 2 at com.mysql.jdbc.SQLError.create 小Bug异常

    public boolean updateMemberslnfo(MembersInfo membersInfo) throws SQLException{ StringBuffer sqlBuffer = new StringBuffer(“UPDATE membersinfo SET “); boolean check = true; List<O…

    MySQL 2023年4月12日
    00
  • Mysql入门基础 数据库创建篇

    下面我将详细讲解“Mysql入门基础 数据库创建篇”的完整攻略,分为以下几个方面进行讲解: 1. Mysql数据库介绍 MySQL是一个关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前为Oracle公司维护。 2. Mysql数据库的安装 请先自行查看相关安装教程,此处不再赘述。 3. 数据库创建 3.1 连接Mysql数据库 以Wi…

    MySQL 2023年5月18日
    00
  • mysql 1449 : The user specified as a definer (‘root’@’%’) does not exist ,mysql 赋给用户权限 grant all privileges on

    mysql 1449 : The user specified as a definer (‘root’@’%’) does not exist 解决方法 遇到了 SQLException: access denied for  @’localhost’ (using password: no)   遇到了 SQLException: access deni…

    MySQL 2023年4月13日
    00
  • MySQL忘记root密码后如何重置?3种方法详解

    MySQL是一种流行的关系型数据库管理系统,它采用基于客户端-服务器模型的分布式架构,可以支持多个并发用户。 然而,有时候我们会遇到忘记了root密码的情况,这个时候我们应该如何处理呢? 以下是一些常用的重置MySQL root密码的方法: 方法一:使用mysqladmin工具重置密码 使用以下命令停止MySQL服务:sudo systemctl stop …

    MySQL 2023年3月10日
    00
  • MySQL 8.0.31中使用MySQL Workbench提示配置文件错误信息解决方案

    MySQL是一款常用的关系型数据库管理系统,而MySQL Workbench则是MySQL官方的图形化界面工具。但是,在使用MySQL Workbench时,可能会遇到提示“Could not find configuration file”的错误。在MySQL 8.0.31版本中,该错误提示会直接弹出对话框,影响使用。本文将详细介绍如何解决这一问题。 问题…

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