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

优质内容筛选与推荐>>
1、Python Tkinter 学习笔记
2、中文目录对 sublime text 有什么影响?
3、儿童节礼物
4、SPA项目开发之首页导航+左侧菜单
5、leetcode 55 Jump Game 三种方法,回溯、动态规划、贪心


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号