一 简介:我们会持续对binlog进行分析,但是不深入代码
二 版本 5.6
    格式
    GTID和传统格式
    传统格式
     一 binlog针对具体事务注意点-1
         1 update会记录更改前和更改后所有列的值
         2 delete会记录删除前所有列的值
         3 insert会记录插入的具体sql
         4 ddl语句只会记录语句本身,不会记录影响行
         5 dcl语句不会记录
         6 特殊类型
              1 trigger 1 记录产生数据更新的sql语句。对于调用触发器后产生的数据更新,并不记录到binlog中
              2 function 如果函数中有数据改变,那函数的调用语句(包括select语句)将记录到binlog中
              3 event event触发事件后,更新数据的sql语句将记入binlog,event功能默认是关闭的。在master上定义event后,slave同步event并将其标示为SLAVESIDE_DISABLED,这里要特别注意
         总结:1 记录创建语句本身 2记录执行过程中所生成的语句,并不会记录列所有值
        7 特殊语句
             create table as select * from 是按照insert单条记录记录的,但是属于一个事务

GTID

1 GTID格式会在binlog开头记录之前事务执行过的gtid总和,便于进行扫描

2 5.7的GTID会在binlog每个事务中记录一组基于并行复制的值

3 GTID 每个事务都有唯一的GTID标识
  二 binlog针对事务记录点-2
        1 记录表信息
          1 server_id

1 binlog执行事务所在数据库的server_id,

2 哪怕在多级复制中级联生成的binlog,集群server_id不会改变,一定是master的server_id

3 双主架构中,如果判断出是自己的server_id,就不会执行了,解决了不停执行事务的死循环

2  CRC32   binlog_checksum加密协议,MGR架构不支持

3 Table_map  目标的库+表

4 Table_id   目标表的table_id

5 type_evnet 对应 delete_event,update_event,insert_event 删 更新和插入(binlog_row_image=FULL(记录全部字段)=MINIMAL(记录关键字段)

6 具体的事务

包含具体的值,详见上述

7 Xid event 表示事务被正确的提交了

三 恢复数据场景
        DML场景
       1 delete-table全表/部分 数据
       2 update-table全表/部分 数据
       解决办法 根据binlog恢复
       DDL场景
      1 truncate/drop table
      2 modify tale
      解决办法 根据历史备份+binlog恢复
      通用解决办法 根据最新的历史备份+之后的binlog进行恢复,然后数据导入
四 备份

本地binlog默认保留7天,利用 binlog_server进行异地binlog备份

六 解析工具

canal以及扩展otter  程序持续读取binlog的工具,非常普遍的应用

mysqlbinlog 系统自带的分析binlog工具,进行需求统计和回滚binlog

binlog2sql/MyFlash  第三方分析并回滚binlog工具

七 应用场景

1 为从库和其他应用比如(canal)提高操作实时解析同步功能

2 历史数据进行恢复(全量binlog可以保证能恢复任意时间点)

3 历史数据进行查看(全量binlog可以查看任何时间段的数据)

4 对库/表进行操作统计(1 排查主从延迟问题 2 排查高IO服务问题)

mysql 原理 ~ binlog的更多相关文章

  1. 不小心删除数据--利用MySQL的binlog恢复数据

    MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...

  2. MySQL基于binlog主从复制

    MySQL复制介绍 默认情况 下复制是异步进行的,从库也不需要一直连接到主库来同步数据 MySQL复制的数据粒度可以是主实例上所有的数据库,也可以是指定的一个或多个数据库 ,也可以是一个数据库里的指定 ...

  3. canal —— 阿里巴巴mysql数据库binlog的增量订阅&消费组件

    阿里巴巴mysql数据库binlog的增量订阅&消费组件canal ,转载自  https://github.com/alibaba/canal 最新更新 canal QQ讨论群已经建立,群号 ...

  4. 阿里巴巴开源项目: canal 基于mysql数据库binlog的增量订阅&消费

    背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增 量变更,不过从2010年开始,阿里系公司开始逐步的 ...

  5. mysql利用binlog恢复数据详细例子

    模拟数据恢复的案例 有些时候脑瓜就会短路,难免会出错 场景:在生产环境中,我们搭建了mysql主从,备份操作都是在从备份数据库上 前提:有最近一天或者最近的全备 或者最近一天相关数据库的备份 最重要的 ...

  6. 阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

    背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝 ...

  7. 《MySQL数据库》MySQL ERRORLOG,BINLOG,SLOWLOG日志详解

    前言 MySQL 经常出现启动错误或者执行错误等等,这个时候我们需要查询error日志 在数据库使用中,经常会出现需要恢复数据的情况,MySQL如果需要恢复数据的话需要开启binlog(二进制日志). ...

  8. 监听MySQL的binlog日志工具分析:Canal

    Canal是阿里巴巴旗下的一款开源项目,利用Java开发.主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费,目前主要支持MySQL. GitHub地址:https://github. ...

  9. MySQL的binlog有啥用?谁写的?在哪里?怎么配置

    目录 一.唠嗑 二.什么是bin log? 三.它在哪里? 四.bin log的相关配置 五.binlog 有啥用? 六.超有用的参数 sql_log_bin 七.未来几篇文章 推荐阅读 一.唠嗑 文 ...

随机推荐

  1. So you want to be a 2n-aire? UVA - 10900(概率)

    题意: 初始值为1, 每次回答一个问题,如果答对初始值乘2,答错归0,结束,一共有n个问题,求在最优的策略下,最后值的期望值 解析: 注意题中的一句话  每个问题的答对概率在t和1之间均匀分布  也就 ...

  2. 遍历List、Map删除元素

    遍历List删除元素 方法一: List<String> list = new ArrayList<>(); list.add("1"); list.add ...

  3. 51单片机 | I/O口直接输入输出实例

    51单片机P0/P1/P2/P3口的区别: P0口要作为低8位地址总线和8位数据总线用,这种情况下P0口不能用作I/O,要先作为地址总线对外传送低8位的地址,然后作为数据总线对外交换数据: P1口只能 ...

  4. ECMAScript 6 -- let和const命令

    ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. for (let i = 0; i ; i++) {console.log(i);} ...

  5. 【洛谷P3224】永无乡 并查集+Splay启发式合并

    题目大意:给定 N 个点的图,点有点权,初始有一些无向边,现在有 Q 个询问,每个询问支持动态增加一条无向边连接两个不连通的点和查询第 X 个点所在的联通块中权值第 K 大的是哪个点. 题解:学会了平 ...

  6. css实现单选效果,看看有趣的tabIndex

    以前我实现单选变色几乎都是用js实现的,今天看到有个css属性可以直接实现单选变色,很开心啊~ 话不多说看效果 实现的代码如下 下面我们看看用focus实现别的有趣的效果 话不多说看效果 实现的代码如 ...

  7. C++中hpp的适用

    本文第一部分转载百度百科,在此感谢百度.第二部分示例为独立编写. hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即 ...

  8. Junit测试的理解------java基础知识

    前言:不知道是最近懒了,还不不想认真写博客,其实写一个质量高的博客是需要时间的,没办法时间太紧了 package com.mon11.day13.linkedlist; import static o ...

  9. Django 2.0.3 使用笔记

    运行环境: Python 3.5.2 Django 2.0.3 Django Admin中model显示为中文 定义model时,定义一个Meta对象,设置需要显示的中文名称.verbose_name ...

  10. P1450 [HAOI2008]硬币购物

    题目描述 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. di,s<=100000 ...