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格式)

  • 相关阅读:
    初探XML
    Hibernate 由实体类与配置文件的配置关系生成数据库中的表
    利用JSP中的过滤器解决中文乱码问题
    关于iBatis配置xml文件时出现中文注释出错的一个问题(很坑爹.)
    Myeclipse中xml文件里自动提示消失解决办法
    iBatis的基本配置+CRUD操作
    Myeclipse下配置svn
    Hibernate与iBastis 比较(转载)
    本人了解的分页查询
    Hibernate五大核心接口简介
  • 原文地址:https://www.cnblogs.com/51yuki/p/mysql15.html
Copyright © 2011-2022 走看看