从整库备份的sql文件中导出某个表的sql语句时,vim查找到表的第一条INSERT语句后,按上下换行键计数INSERT语句的条数,然后按n yy复制,退出vim后,
再新建一个文件,按p粘贴刚才的n条INSERT语句,再进行source导入。

----------------------------------------------------------------

一、登录数据库刷新binlog

1.1)查看当前的binlog
MySQL> show master status;
+---------------------+----------+--------------+------------------+-------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------------+----------+--------------+------------------+-------------------+
| test-150-bin.000003 |  2895377 |              |                  |                   |
+---------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

1.2)刷新binlog
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

1.3)确认刷新binlog成功
mysql> show master status;
+---------------------+----------+--------------+------------------+-------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------------+----------+--------------+------------------+-------------------+
| test-150-bin.000004 |      120 |              |                  |                   |
+---------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
用show master status 命令查看当前的binlog已经由test-150-bin.000003变为test-150-bin.000004,
证明binlog已经刷新成功。

二、查询二进制日志位置
mysql> show variables like'log_bin%';
+---------------------------------+------------------------------------------+
| Variable_name                   | Value                                    |
+---------------------------------+------------------------------------------+
| log_bin                             | ON                                       |
| log_bin_basename             | /db/mysql5.6/data/test-150-bin       |
| log_bin_index                    | /db/mysql5.6/data/test-150-bin.index |
| log_bin_trust_function_creators  | ON                                       |
| log_bin_use_v1_row_events       | OFF                                      |
+---------------------------------+------------------------------------------+

三、从二进制日志中获取表被删除的时间
$ /*!*/;
DROP TABLE `test` /* generated by server */
/*!*/;
# at 122989
#140126 17:04:06 server id 150  end_log_pos 123039 CRC32 0x43476aad     Rotate to test-150-bin.000004  pos: 4

drop语句的前两行表名drop语句的执行时间是在 ');
+-----------------------------+
| from_unixtime('1390727015')  |
+-----------------------------+
| 2014-01-26 17:03:35.000000 |
+-----------------------------+
1 row in set

四、从binlog中获取指定数据库的改变数据
用mysqlbinlog 恢复ivr数据库在二进制日志test-150-bin.000003中的数据
假设从上一次mysql备份后,只有一个binlog产生,即登录数据库时查询到binlog test-150-bin.000003

> recover_ivr.sql

如果从上次备份刷新binlog,到发现表被删掉的过程中产生了多个binlog。则要按照binlog产生的顺序进行恢复,那
么恢复的次序应该是按照binglog的产生的序号,从小到大依次恢复。
假如从上次备份,到发现表被删除,共有两个binlog文件,分别是test-150-bin.000002,test-150-bin.000003 ,
则按照binlog序号从小到大的排列,恢复的顺序应该是:

> recover_ivr.sql

>> recover_ivr.sql

由于恢复的文件recover_ivr.sql中包含了整个ivr数据库的所有表,我们只要恢复指定的表mytable,还要对恢复出来的sql进行过滤。

cat recover_ivr.sql | grep  -A1 -B3 -i -E '^insert|^update|^delete|^replace|^alter' | grep -A1 -B3 mytable  > mytable.sql

可以先使用more确认一下
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
--
# at 122721
#140126 17:03:28 server id 150  end_log_pos 122721 CRC32 0xe0f851bb     Intvar
SET INSERT_ID=4/*!*/;
#140126 17:03:28 server id 150  end_log_pos 122838 CRC32 0x9efcc7b2     Query   thread_id=12578 exec_time=0     error_code=0
use `ivr`/*!*/;
SET TIMESTAMP=1390727008/*!*/;
INSERT INTO `testtuo` (`name`) VALUES ('d')
/*!*/;
# at 122838

将过滤后的结果保存为sql脚本,恢复到数据库即可。

恢复之前为了避免产生没有用的二进制日志,可以关闭二进制日志的记录
SET SESSION sql_log_bin=0;

恢复完成,启用记录二进制日志
SET SESSION sql_log_bin=1;

 
 

使用mysqlbinlog恢复指定表的更多相关文章

  1. mysqldump恢复指定表

    http://blog.csdn.net/lwei_998/article/details/18860889 如果mysql服务器上不能随意安装软件,当需要从全备份中恢复单个表,怎么办? 1.mysq ...

  2. CentOS下利用mysqlbinlog恢复MySQL数据库

    如果不小心对数据库进行误操作,而又没有及时备份怎么办?这恐怕是广大的coder经常遇到的一类问题.我今天就因为不小心删除了某个数据库,但最后的备份是1个礼拜前的,唯一能解决的办法就是通过mysqlbi ...

  3. 从mysqldump整库备份文件中恢复单表

    最近,系统更新出现了问题,比较紧急,需要对三张表进行回档.由于我们都是采用mysqldump进行每天全备整库,数据量比较大,一个备份文件大概有70G,需要从这个70G文件中恢复三张表,真是蛋疼至极啊, ...

  4. 【Oracle】整库导出后怎么恢复到指定用户的指定表

    在导出的时候,整库导出 这里使用的是dba权限 $exp "'/ as sysdba'" file=full20180227.dmp log=exp_full20180227.lo ...

  5. mysqlbinlog恢复数据-update20140820

    mysqlbinlog恢复数据 BINLOG就是一个记录SQL语句的过程,和普通的LOG一样.只是它是二进制存储,普通的是十进制存储. ================================ ...

  6. 实战演习:mysqlbinlog恢复bin-log数据

    mysqlbinlog恢复bin-log数据 Binlog日志即binary log,是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即从节点同步主节点数据时获取的即是bin-log, ...

  7. 通过mysqlbinlog 恢复数据

    前提数据库开启了bin_log记录日志. 查看日志 刷新日志 flush logs; 再次查看 show binary logs; 向表中插入一条数据 现在执行delete误操作,删除所有的数据. d ...

  8. 使用mysqlbinlog恢复数据

    前提:mysql数据库开启了binlog日志,并且有对应的日志文件 起因:今天由于同事对数据库的误操作不小心删除了一条数据 方法一:通过binlog日志文件恢复数据 通过mysqlbinlog恢复My ...

  9. xtrabackup 恢复单个表【转】

    一.安装与备份 1. 下载安装XtraBackup$wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/binary/tarba ...

随机推荐

  1. vi/vim 光标移动命令(转载)

    转载至:https://www.cnblogs.com/Jacklovely/p/6015037.html vi/vim 光标移动命令 移动光标上:k nk:向上移动n行 9999k或gg可以移到第一 ...

  2. 俞敏洪:我创业24年感悟的3条CEO守则

    转自:http://www.gamelook.com.cn/2017/10/306603 创业24年,他的创业经历被拍成了电影.在一次小范围聚会时,他说现实远比剧本要精彩.“如果让我一切从头开始,我会 ...

  3. Windows下sbt安装配置

    1.下载sbt1.2.8 官网:https://sbt-downloads.cdnedge.bluemix.net/releases/v1.2.8/sbt-1.2.8.tgz 2.配置环境 #SBT_ ...

  4. C# webbrowser全掌握(二)

    全篇引用单元mshtml; 路径:C:\windows\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.msh ...

  5. 网络基础和python

    ·五层协议 物理层,数据链路层,网络层,传输层,应用层 ·用户上网流程 1.本机获取 2.打开浏览器,,输入网址. 3.dns协议(基于udp协议) 4.HTTP部分的内容 5 TCP协议 6 IP协 ...

  6. C语言格式化%整理

    以输出为例: #include <stdio.h> main() { printf("**进制****************************************** ...

  7. better-scroll高度问题

    better-scroll无法滚动主要2方面原因,1)层级关系.2)高度问题

  8. Solr之精确、匹配、排序、模糊查询-yellowcong

    Solr查询数据,其实下面一堆的参数,我也没有做测试,只是转载过来了,我大概只用了高亮.排序.查询.分页,其他的好像没有用过,以后用再来查 一.基本查询 参数 意义 q 查询的关键字,此参数最为重要, ...

  9. js样式之渐变线

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. c# 值类型与引用类型的传参(形参与实参)

    形参是指被调用方法中的参数 实参是指传递给方法的参数 (1)值类型传参是按值传递 值类型传参,形参接受到的是实参的一个副本,即形参发生变化,实参不会发生任何变化 (2)引用类型参数按值传递 当参数传递 ...