首页 > 数据库 >MySQL使用DROP TABLE命令删除表怎么恢复?

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

时间:2023-04-03 18:01:59浏览次数:35  
标签:文件 查看 mysql DROP SQL MySQL 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的日志文件,命名都是由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文件

如果是一个文件可以肉眼查看,因为作者生成了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
这个就不多说了,相信你也会了~!

标签:文件,查看,mysql,DROP,SQL,MySQL,TABLE,日志
From: https://www.cnblogs.com/lin168/p/17283715.html

相关文章

  • 本地Navicat 连接阿里云esc上mysql
     登陆esc服务器上的mysql选择mysql  查看user表中的两个关键参数selectuser,hostfromuser; localhost代表本地访问。这个字段host代表访问ip限制updateusersethost="%"whereuser="root";systemctlrestartmysqld重启mysql。使权限生效......
  • mysql解锁
    概述有时候会遇到数据库死锁问题,报错锁等待超时:Lockwaittimeoutexceeded解决查看锁情况查询锁--mysql8.0--查看当前锁select*fromperformance_schema.data_locks;--锁关系select*fromperformance_schema.data_lock_waits;--mysql6select*frominforma......
  • 安装mysql.so
     1、----  cd/usr/local/src/php-5.5.34/ext/mysql/2、---- /usr/local/php5/bin/phpize3、----./configure--with-php-config=/usr/local/php5/bin/php-config--with-mysql=/usr/local/mysql4、----make&&makeinstall会生成如下内容:Installingsharedexten......
  • linux使用php动态安装模块mysqli.so(ext/mysqlnd/mysqlnd.h: 没有那个文件或目录)
     由于我先安装的php,再安装的mysql!正常过程: 1、安装mysql 2、安装phpconfigure时带–with-mysql参数现在我不想重装,因此使用phpize动态安装mysqli,php版本为php-7.2.13 1先查看php下phpize路径  得知路劲为/usr/local/php/bin/phpize2切换到php源码包目录php-7......
  • 如何在PHP7中扩展mysql,先安装php7.2。后安装mysql
     相对与PHP5,PHP7的最大变化之一是移除了mysql扩展,推荐使用mysqli或者pdo_mysql,实际上在PHP5.5开始,PHP就着手开始准备弃用mysql扩展,如果你使用mysql扩展,可能看到过这样的提示”Deprecated:mysql_connect():Themysqlextensionisdeprecatedandwillberemovedinthefu......
  • MYSQL中CAST函数
    MYSQL中CAST函数CAST函数用于将值从一种转换数据类型的方法语法:SELECTCAST(xAStype);x:要处理的数据type:要转换的数据类型,取值下方表格type取值值描述DATE将value转换成'YYYY-MM-DD'格式TIME将value转换成'HH:MM:SS'格式DATETIME将value转换......
  • iptables 跳板机转发策略
    1、中转机执行策略。iptables-tnat-IPREROUTING-s10.*.*.125/30(对端过来地址出口)-ptcp-mtcp--dport28070-jDNAT--to-destination10.15.2.10:28070对端过来的流量转到到内网另一台机器iptables-tnat-IPREROUTING-s10.15.2.10-ptcp-mtcp--dport80-jD......
  • C# 后台服务监控SQL Server数据库表改动并同步到MySQL数据库表
    需求将A服务器的sqlserver数据库item_mst表的数据同步到MySQL数据库Part表监控Item_mst表中item,description,overview的更改并同步到MySQL数据库 针对需求一,基本就是执行一次,单独写了个winform用来做这事针对需求二,写了个Windowsserviceapp Nuget安装 Dapper就是个ormSeril......
  • 零基础Go语言从入门到精通(数据库编程:02-Gorm 操作 MySQL 数据库)
    gin-gorm-api-example/main.goatmaster·cgrant/gin-gorm-api-example·GitHubhttps://github.com/cgrant/gin-gorm-api-example/blob/master/main.goGorm介绍ThefantasticORMlibraryforGolangGo语言的超棒的ORM类库功能强大:全功能ORM(几乎)关联(包含一个,包含多个,属......
  • mysql总结
    MyiSAM和innodbMyiSAM:非聚集索引、B+树、叶子结点保存data地址;innodb:聚集索引、B+树、聚集索引中叶子结点保存完整data,innodb非聚集索引需要两遍索引,innoDB要求表必须有主键;innodb为什么要用自增id作为主键:自增主键:顺序添加,页写满开辟新的页;非自增主键(学号等):主键值随机,有碎片......