昨天某张表数据被某个开发人员误删除了!由于整个库实在是太大了,恢复时间比较长,以后为了避免这种情况,需要实现某一历史时间点恢复单张表的备份恢复策略!时间在1个小时之内,最好5分钟之内最好!免费软件或者收费软件都可以的。(考虑下实现这个功能是否会影响现在的备份策略)

解决方案 »

  1.   

    没有什么好工具。工具只不过是替代人来做一个重复的事情。但不可以有新方法。方法是人来定义的算法。
    只能把最新的全备找出, 你或者可以恢复到另一台MYSQL服务器上。然后再通过 BINLOG导出SQL语句进行分析。 这些操作即使使用某种工具也必须去执行的。
      

  2.   

    那就直接分析 MYSQLDUMP导出的全备,把这个表相关的 CREATE TABLE , INSERT INTO 取出。然后这张表。然后再用MYSQLBINLOG生成 BINLOG日志中的SQL语句文件,做同样处理,找出所有与这个表相关的操作。(如果有触发器则会更复杂)
      

  3.   


    binlog中的sql文件找不到啊!-- 找到csf_pub库的所有记录。
    [root@sh-192-168-250-20 daily]# /usr/local/mysql/bin/mysqlbinlog  mysql-bin.000042 -dcsf_pub > csf_pub_22.sql;-- 找到所有file_trace_b表的记录
    [root@sh-192-168-250-20 daily]# grep -i "file_trace_b" csf_pub_22.sql >trac_file_d.sql;-- 找到所有file_trace_b表的inesrt记录
    [root@sh-192-168-250-20 daily]# grep -v -i "delete" trac_file_d.sql > trac_file_d_insert.sql最后 
    [root@sh-192-168-250-20 daily]# more trac_file_d_insert.sql
    显示出来确是:
    #101221 14:02:45 server id 1  end_log_pos 139263144     Table_map: `csf_pub`.`file_trace_b` mapped to number 13677
    #101221 14:06:06 server id 1  end_log_pos 140344665     Table_map: `csf_pub`.`file_trace_b` mapped to number 13677
    #101221 14:06:06 server id 1  end_log_pos 140345266     Table_map: `csf_pub`.`file_trace_b` mapped to number 13677
    #101221 14:06:06 server id 1  end_log_pos 140346197     Table_map: `csf_pub`.`file_trace_b` mapped to number 13677
    不是insert的sql语句,大家指点,问题出在哪里啊?
      

  4.   

    -- 找到所有file_trace_b表的inesrt记录
        grep -i "insert" trac_file_d.sql > trac_file_d_insert.sql 这样呢,要是没的话,.估计这个binlog里面没有insert的记录
      

  5.   

    1 我认为mysql无法得知是谁删除了表,只能知道是哪个id删的。
    2 你的需求是库分表,时分段。
    3 我觉得像你这种情况,分表备份是必须的,也是容易实现的。
    可以写脚本来完成,也就是说枚举出所有库名,然后进入第一个库,枚举所有表名,然后备份第一个表。如此循环,就可以每个表生成一个sql文件。
    但有个小缺点,是这种备份方法出来的sql没有建库语句。也就是说这个备份,不适合到另外一台机子上恢复。当然你也可以用脚本单独生成这些语句。
    4 binglog 正相反,它可以基于时间回复,但是却不是每个表单独一个文件,如何实现binlog只恢复单个表,还没想到,不知道
    mysqlbinlog hostname-bin.[0-9]* | mysql aaa bbb
    这样的命令可以不?
      

  6.   

    您可以使用zrm 来做备份和恢复方案,它的企业版支持二进制日志的图形化恢复操作
    http://www.zmanda.com/backup-mysql.html