zoukankan      html  css  js  c++  java
  • MySQL之二进制日志

    一、Binlog日志格式

    根据日志定义的格式不一样,可以分为Statement格式、Row格式或者MIXED格式

    mysql5.6----》

    | binlog_format | STATEMENT |

    mysql5.7---》

    | binlog_format | ROW |

    理解三种不同的格式

    A: Statement格式

    说明:基于语句的,记录操作的sql语句

    优点:

    • binlog文件大小较小
    • 易于理解,方便阅读
    • 日志中包含原始SQL,方便统计和审计

    缺点:

    • 存在安全隐患,可能导致主从不一致
    • 对一些系统函数不能复制,比如sysdate,uuid等
    • 不支持不确定的SQL语句

     (以上格式不推荐使用,但是在mysql5.7以前都是默认的格式)

    B: Row格式

    说明: 记录操作的每一行数据

    优点:

    • 相比statement更加安全的复制格式
    • 系统的特殊函数也可以复制
    • 更少的锁
    • 数据一致性高

    缺点:

    • binlog 文件会比较大
    • 无法从binlog中看见用户执行的SQL
    • 每个表最好都要有一个主键

    (推荐使用)

     从mysql5.7之后,默认的格式为Row格式

    Table_map: 记录表的元数据信息 

    ROWS_EVENT分为三种:WRITE_ROWS_EVENT,UPDATE_ROWS_EVENT,DELETE_ROWS_EVENT,分别对应insert,update和delete操作。

    [root@node8 m_data]# mysqlbinlog master-bin.000004 -vv

    ### INSERT INTO `mydb`.`parent`
    ### SET
    ### @1=10 /* INT meta=0 nullable=1 is_null=0 */
    ### INSERT INTO `mydb`.`parent`
    ### SET
    ### @1=20 /* INT meta=0 nullable=1 is_null=0 */
    ### INSERT INTO `mydb`.`parent`
    ### SET
    ### @1=30 /* INT meta=0 nullable=1 is_null=0 */

    @1表示列1的值

    C: MIXED格式

    说明:混合使用Row和Statement格式,对DDL记录会使用Statement,对于table里的行操作会记录Row格式

    如果是Innodb表,事务级别为Read committed 或者 read uncommitted日志级别只能使用Row格式

    (一般不推荐使用Mixed格式)

  • 相关阅读:
    oracle_dblink配置
    Data Pump(数据抽取)介绍
    亲测 logminer挖掘
    基础命令
    锁_rac环境kill锁表会话后出现killed状态(解决)
    ASM磁盘组空间不足--ORA-15041:DISGROUP DATA space exhausted (生产库案例)
    where子句的具体含义
    Oracle常用脚本——通过RMAN配置RAC环境的分布式磁带机
    如何创建动态的多维数组且内存空间连续
    Hibernate级联删除
  • 原文地址:https://www.cnblogs.com/51yuki/p/mysql15.html
Copyright © 2011-2022 走看看