测试出有个问题:mysqlbinlog 不加任何参数 恢复整个binlog 日志文件发现里面有这个操作 SET @@SESSION.GTID_NEXT 的操作,
 如果需要恢复文件的时候就需要把他过滤掉,否则恢复数据不成功
 
测试环境:./mysql  Ver 14.14 Distrib 5.7.19
结论:需要用binlog 日志还原数据记录的时候,备份好自己的binlog 日志以后,然后执行 reset master,然后在直接导入我们mysqlbinlog 导出的文件。
         或者导入的时候加入-f 参数强行导入
 
测试步骤如下:
测试表结构
CREATE TABLE `t1` (
  `id` int(60) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL DEFAULT '',
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
1 insert into t1 values(1,'xiaoxiao',20),(2,'huahua',21),(3,'lili',22);  ###mysqb-bin.0000001
2 flush logs
3 insert into t1 values(4,'xiaohong',18);  # mysql-bin.000002
  insert into t1 values(5,'aying',22);
4 flush logs
5  delete from t1 where id<4;   #mysql-bin.000003
 这个时候我们看到我们有了3个binlog文件
show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       499 |
| mysql-bin.000002 |       774 |
| mysql-bin.000003 |       194 |
+------------------+-----------+
 /usr/local/mysql/bin/mysqlbinlog --start-position=219  mysql-bin.000001 >/tmp/ok.txt

###查看以下是日志信息
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#170922 10:14:10 server id 2003309  end_log_pos 123 CRC32 0x509b4a7a    Start: binlog v 4, server v 5.7.19-log created 170922 10:14:10 at startup
ROLLBACK/*!*/;
BINLOG '
8nHEWQ9tkR4AdwAAAHsAAAAAAAQANS43LjE5LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADyccRZEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AXpKm1A=
'/*!*/;
# at 219
#170922 10:19:50 server id 2003309  end_log_pos 290 CRC32 0x5073a29d    Query   thread_id=183   exec_time=0     error_code=0
SET TIMESTAMP=1506046790/*!*/;
SET @@session.pseudo_thread_id=183/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 290
#170922 10:19:50 server id 2003309  end_log_pos 338 CRC32 0xca27d49b    Table_map: `zst`.`t1` mapped to number 223
# at 338
#170922 10:19:50 server id 2003309  end_log_pos 421 CRC32 0xacc98577    Write_rows: table id 223 flags: STMT_END_F BINLOG '
RnPEWRNtkR4AMAAAAFIBAAAAAN8AAAAAAAEAA3pzdAACdDEAAwMPAwI8AASb1CfK
RnPEWR5tkR4AUwAAAKUBAAAAAN8AAAAAAAEAAgAD//gBAAAACHhpYW94aWFvFAAAAPgCAAAABmh1
YWh1YRUAAAD4AwAAAARsaWxpFgAAAHeFyaw=
'/*!*/;
# at 421
#170922 10:19:50 server id 2003309  end_log_pos 452 CRC32 0x57228b9c    Xid = 3692
COMMIT/*!*/;
# at 452
#170922 10:20:02 server id 2003309  end_log_pos 499 CRC32 0xe31d7a38    Rotate to mysql-bin.000002  pos: 4
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
/usr/local/mysql/bin/mysqlbinlog -v  mysql-bin.000001 >/tmp/faile.txt

#### 查看以下的日志信息
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#170922 10:14:10 server id 2003309  end_log_pos 123 CRC32 0x509b4a7a    Start: binlog v 4, server v 5.7.19-log created 170922 10:14:10 at startup
ROLLBACK/*!*/;
BINLOG '
8nHEWQ9tkR4AdwAAAHsAAAAAAAQANS43LjE5LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADyccRZEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AXpKm1A=
'/*!*/;
# at 123
#170922 10:14:10 server id 2003309  end_log_pos 154 CRC32 0x2a8835fb    Previous-GTIDs
# [empty]
# at 154
#170922 10:19:50 server id 2003309  end_log_pos 219 CRC32 0xbf230db3    GTID    last_committed=0        sequence_number=1       rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '6fb6a0c6-9dd2-11e7-a4e8-0050569c404d:1'/*!*/;        #### 这个操作,直接导致恢复整个日志文件会出错。
# at 219
#170922 10:19:50 server id 2003309  end_log_pos 290 CRC32 0x5073a29d    Query   thread_id=183   exec_time=0     error_code=0
SET TIMESTAMP=1506046790/*!*/;
SET @@session.pseudo_thread_id=183/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 290
#170922 10:19:50 server id 2003309  end_log_pos 338 CRC32 0xca27d49b    Table_map: `zst`.`t1` mapped to number 223
# at 338
#170922 10:19:50 server id 2003309  end_log_pos 421 CRC32 0xacc98577    Write_rows: table id 223 flags: STMT_END_F BINLOG '
RnPEWRNtkR4AMAAAAFIBAAAAAN8AAAAAAAEAA3pzdAACdDEAAwMPAwI8AASb1CfK
RnPEWR5tkR4AUwAAAKUBAAAAAN8AAAAAAAEAAgAD//gBAAAACHhpYW94aWFvFAAAAPgCAAAABmh1
YWh1YRUAAAD4AwAAAARsaWxpFgAAAHeFyaw=
'/*!*/;
### INSERT INTO `zst`.`t1`
### SET
###   @1=1
###   @2='xiaoxiao'
###   @3=20
### INSERT INTO `zst`.`t1`
### SET
###   @1=2
###   @2='huahua'
###   @3=21
### INSERT INTO `zst`.`t1`
### SET
###   @1=3
###   @2='lili'
###   @3=22
# at 421
#170922 10:19:50 server id 2003309  end_log_pos 452 CRC32 0x57228b9c    Xid = 3692
COMMIT/*!*/;
# at 452
#170922 10:20:02 server id 2003309  end_log_pos 499 CRC32 0xe31d7a38    Rotate to mysql-bin.000002  pos: 4
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
./mysql -h127.0.0.1 -P3309 -uroot -p </tmp/ok.txt  (因为我们导出的时候是基于位置点的,所有我们跳过了gtid
能够还原出删除的数据
./mysql -h127.0.0.1 -P3309 -uroot -p </tmp/faile.txt(里面有SET @@SESSION.GTID_NEXT= '6fb6a0c6-9dd2-11e7-a4e8-0050569c404d:1 所以我们需要跳过GTID )
不能够还原删除的数据
 
把 faile.txt 导出文件里面 SET @@SESSION.GTID_NEXT= '6fb6a0c6-9dd2-11e7-a4e8-0050569c404d:1'/*!*/; 删除或者注释掉可以恢复删除的数据
 
解决办法:1:像刚才我们看到的日志一样,我们需要把SET @@SESSION.GTID_NEXT= '6fb6a0c6-9dd2-11e7-a4e8-0050569c404d:1'/*!*/; 
 跳过进行了,比如说我们把日志里面过滤掉或者注释掉在导入是能成功的。
 
 2:在导入前我们需要reset我们的所有日志文件,在reset  master log之前,请备份好自己的日志文件,否则后果可能很惨。
 或者加入 -f 参数强制导入 这样在导入。
 
所以问题的重点是GTID,至于这么操作根据自己的实际情况来恢复数据吧。
 
 

MySQL binlog 的恢复操作的更多相关文章

  1. 一次基于innobackupex备份及binlog的单表恢复操作

    [环境介绍] 系统环境:Red Hat Enterprise Linux Server release 7.0 (Maipo) + Server version: 5.7.18-log MySQL C ...

  2. Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...

  3. Mysql利用binlog日志恢复数据操作(转)

    a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...

  4. 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  5. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  6. mysql undo 和redo 被误删除的恢复操作(一致性)

    今天在群里看到有人说不熟悉innodb把ibdata(数据文件)和ib_logfile(事务日志)文件误删除了.不知道怎么解决.当时我也不知道怎么办.后来查阅相关资料.终找到解决方法.其实恢复也挺简单 ...

  7. MySQL binlog日志操作详解

    MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. bi ...

  8. MySQL的binlog日志恢复(转)

    binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...

  9. Linux 上通过binlog文件 恢复mysql 数据库详细步骤

    一.binlog 介绍 服务器的二进制日志记录着该数据库的所有增删改的操作日志(前提是要在自己的服务器上开启binlog),还包括了这些操作的执行时间.为了显示这些二进制内容,我们可以使用mysqlb ...

随机推荐

  1. Java入门(6)——集合、基本数据类型和引用数据类型的相互转换

    集合: 1.HashMap ---->  类 概述: 通过key可以找到value, key就是键, values就是值. 俗称键值对. 特点: 无序的    值可以重复  键不可以重复的  如 ...

  2. 报表 jasper + ireport5.6

    下载 iReport-5.6.0,jdk7,以及众多lib , 这里我提供下资源(我的百度云) 安装好iReport-5.6.0和jdk7,  在安装目录的\etc\ireport.conf,修改其中 ...

  3. C# 三层架构之系统的登录验证与添加数据的实现

    利用三层架构体系,实现学生管理系统中用户的登录与添加班级信息的功能,一下代码为具体实现步骤的拆分过程: 一.用户登录界面功能的实现 1.在数据访问层(LoginDAL)进行对数据库中数据的访问操作 u ...

  4. python常用标准库

    -------------------系统内建函数------------------- 1.字符串     str='这是一个字符串数据测试数据'对应     str[0]:获取str字符串中下标为 ...

  5. Linux和win7(win10)双系统时间错误问题 时间相差8小时

    转载自 http://m.2cto.com/os/201204/126212.html 有修改 前一段时间刚装了centos 5.4和win7的双系统.发现win7的系统时间不对,机子没上网,每天开机 ...

  6. Spring框架Controller层(表现层)针对方法参数是Bean时HttpServletRequest绑定参数值问题解释

    在做项目的时候,有一个需求是将数据库中的信息封装到实体类返回到jsp界面 传过来的参数只是实体类的id属性,然后根据id属性去查数据库,事情就是这样,然后 结果遇到很奇怪的事情,在jsp页面中使用EL ...

  7. TP5.0实现无限极回复功能

    最近做项目的时候用到了评论回复,使用ThinkPHP5.0框架做回复碰到了一些问题,简单总结一下.(李昌辉) 1.首先是数据表的设计: create table zy_huifu ( code int ...

  8. 实现一个简单的Laravel的dd库

    前几天写了一个简单的Laravel的dd库. 为什么自己要写一个这样的库? Laravel本身已经实现了自己的输出dd函数,但是我之所以要写这样一个库,一来是因为Laravel本身对这个库的封装没办法 ...

  9. MySQL(九)之数据表的查询详解(SELECT语法)二

    上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1 ...

  10. Project 2:传奇汉诺塔

    汉诺塔简介:汉诺塔问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在 ...