重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1236|回复: 0
打印 上一主题 下一主题

[安装] MySQL的binlog的格式

[复制链接]
跳转到指定楼层
楼主
发表于 2022-11-27 14:06:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一种是statement,一种是row。另一种叫作mixed,其实它就是前两种格式的混合。
当binlog_format=statement

binlog里面记录的就是SQL语句的原文。

由于statement格式下,记录到binlog里的是语句原文,因此可能会出现这样一种情况:在主库执行这条SQL语句的时候,用的是索引a;而在备库执行这条SQL语句的时候,却使用了索引t_modified。因此,MySQL认为这样写是有风险的。
binlog_format=‘row’

前后的BEGIN和COMMIT是一样的。但是,row格式的binlog里没有了SQL语句的原文,而是替换成了两个event:Table_map和Delete_rows。

    Table_map event,用于说明接下来要操作的表是test库的表t;

    Delete_rows event,用于定义删除的行为。

需要借助mysqlbinlog工具,解析和查看binlog中的内容
binlog_format=‘mixed’   它就是前两种格式的混合

    因为有些statement格式的binlog可能会导致主备不一致,所以要使用row格式。
    但row格式的缺点是,很占空间。比如你用一个delete语句删掉10万行数据,用statement的话就是一个SQL语句被记录到binlog中,占用几十个字节的空间。但如果用row格式的binlog,就要把这10万条记录都写到binlog中。这样做,不仅会占用更大的空间,同时写binlog也要耗费IO资源,影响执行速度。
    所以,MySQL就取了个折中方案,也就是有了mixed格式的binlog。mixed格式的意思是,MySQL自己会判断这条SQL语句是否可能引起主备不一致,如果有可能,就用row格式,否则就用statement格式。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-24 21:25 , Processed in 0.118979 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表