热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpmyadmin误删表后的恢复过程(心惊胆跳啊)_MySQL

phpmyadmin误删表后的恢复过程(心惊胆跳啊)
phpmyadmin误删表后的恢复过程(心惊胆跳啊)_MySQL

话说今天不知道是抽风了还是失魂了,在用phpmyadmin删除测试数据时,竟然将整个表删除了:

等程序运行出错时,才出现整个表都没有了,而且之前也没有备份好!这下蛋疼了,这个可是production服务器,里面的数据可不能丢啊! 服务器是linux的,我不是很熟悉,也不知道mysql装在哪。无奈之下,google,发现有不少人也有像我一样犯傻的一回,但是几乎没有看到具体的解决方法(有说用硬盘软件找回,也有说用二进制文件找回),但是我本身对服务器不大懂,觉得好纠结,那边又在催说数据怎么没有了,还说一定得找回来。这下我更急了,晚饭都没心情吃。 这时,我找到了一些专门帮人恢复数据的技术人员。他问了我数据量,数据库引擎,当我说是‘myisam’时,他来了句:那无解了。。当时我一下子懵了。 情急之下,我想到了,之前在testing服务器里面有一个副本数据库,但是那里的数据已经有些时日了,根本没有最新一个月的数据。这根本无法解救我! 这里我在phpmyadmin中看到了这个:

脑里出来了google上说的用二进制恢复,就点开看一下。结果大喜!OMG,服务器开通了日志!

里面有数据库的操作日志,而且还是sql格式的!!!我之前没有接触过这个东西,但这时它就是我的救命稻草。我浏览了一下,里面有近一个月的更新记录,已经足够了。不过有一个问题,在phpmyadmin里面看,只能显示其中一小部份内容,面对10几w的数据行,想要一个个找出被删表的数据,太难了。 这时,我想到了可以从服务器中下载这些文件,然后得到其中的数据。说干就干,我登录服务器,搜索这些二进制文件:

上图中红圈的就是了 然后将这些文件一个个导出成可以阅读的sql:

这样将这些二进制文件一个个输出成了正常的sql文件。 这时,就是要从这些文件中找到被删表相关的数据了,于是我写了个java程序帮我做这个事情:

package com.nerve.sql.reload;  
   
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.FileReader;  
import java.io.FileWriter;  
import java.util.ArrayList;  
import java.util.List;  
   
import org.nerve.util.NumberUtil;  
   
/** 
 * @project: cloudOffice_swing 
 * @file: ReloadWorker.java 
 * @package: com.nerve.sql.reload 
 * @description: 
 *    将二进制日志导出的文件中相应表的操作记录提出出来 
 * @author: 集成显卡    1053214511@qq.com 
 * @date&time: Jan 23, 2014 
 * @change log: 
 */  
public class ReloadWorker {  
      
    public void read(List orgF, String targetF, String table) throws Exception{  
        BufferedWriter bw = new BufferedWriter(new FileWriter(targetF, true));  
          
        for(String or:orgF){  
            BufferedReader br = new BufferedReader(new FileReader(or));  
            String t = null;  
            String t2 = null;  
            table = table.toUpperCase();  
            while((t=br.readLine())!=null){  
                t2 = t.toUpperCase();  
                /* 
                 * 如果是update操作,直接提出 
                 */  
                if(t2.startsWith("UPDATE "+table)){  
                    bw.append(t+";\n");  
                }  
                /* 
                 *  如果是insert语句,因为有一些旧服务器的数据 
                 *  所以要先执行delete操作 
                 */  
                else if(t2.startsWith("INSERT INTO "+table)){  
                    String ids = t2.substring(t2.lastIndexOf(","));  
                    bw.append("delete from "+table+" where id="+NumberUtil.toDigital(ids)+";\n");  
                    bw.append(t+";\n");  
                }  
                /* 
                 * sql语句后面都要加 ; ,因为原来没有,不加的话,在导入到数据库时,出错 
                 */  
            }  
            br.close();  
        }  
          
        bw.flush();  
        bw.close();  
    }  
      
    public static void main(String[] args) throws Exception{  
        long sd = System.currentTimeMillis();  
        ReloadWorker w = new ReloadWorker();  
        List orgs = new ArrayList();  
        orgs.add("C:/Users/IBM_ADMIN/Desktop/000015.txt");  
        orgs.add("C:/Users/IBM_ADMIN/Desktop/000016.txt");  
        orgs.add("C:/Users/IBM_ADMIN/Desktop/000017.txt");  
        orgs.add("C:/Users/IBM_ADMIN/Desktop/000018.txt");  
        orgs.add("C:/Users/IBM_ADMIN/Desktop/000019.txt");  
          
        String targetS = "C:/Users/IBM_ADMIN/Desktop/000017_sql.txt";  
        w.read(orgs, targetS, "task");  
          
        System.out.println("DONE, on " +(System.currentTimeMillis() - sd)/1000+" s");  
    }  
}

得到了汇总的sql文件后,就导入到数据库中。最后,出一个运行图:终于松了一口气。(虽然这次导入花了5分钟。。) 最后提醒大家,一定要常备份,谨慎操作啊!

以上就是phpmyadmin误删表后的恢复过程(心惊胆跳啊)_MySQL的内容,更多相关内容请关注PHP中文网(www.php1.cn)!

推荐阅读
  • Windows环境下Oracle数据库迁移实践
    本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ... [详细]
  • 本文详细探讨了如何根据不同的应用场景选择合适的PHP版本,包括多版本切换技巧、稳定性分析及针对WordPress等特定平台的版本建议。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • PHP中Smarty模板引擎自定义函数详解
    本文详细介绍了如何在PHP的Smarty模板引擎中自定义函数,并通过具体示例演示了这些函数的使用方法和应用场景。适合PHP后端开发者学习。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 解决ADODB连接Access时出现80004005错误的方法
    本文详细介绍了如何解决在使用ADODB连接Access数据库时遇到的80004005错误,包括错误原因分析和具体的解决步骤。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 本文介绍了MySQL窗口函数的基本概念、应用场景及常见函数的使用方法。窗口函数在处理复杂查询时非常有用,例如计算每个用户的订单排名、环比增长率、以及动态聚合等。 ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
author-avatar
asfasfdsfd
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有