MySQL-binlog日志类型及比较

MySQL的binlog有Statement、Row和Mixed三种格式。Statement格式日志小但可能造成主从数据不一致;Row格式保证数据一致但日志大;Mixed格式折中,根据SQL类型选择格式,可能增加开销。
摘要由CSDN通过智能技术生成

MySQL的二进制日志(binlog)是一种记录数据库所有修改操作的日志文件,它可以用于数据恢复、复制和审计等场景。binlog有三种不同的格式,分别是Statement、Row和Mixed,它们各有优缺点,适用于不同的需求。

Statement格式

Statement格式是MySQL 5.7之前的默认格式,它记录了执行的SQL语句及其上下文信息,比如当前时间、用户、随机数等。Statement格式的优点是日志文件较小,节省磁盘空间和网络带宽,而且可以在主从复制时使用不同版本的MySQL。Statement格式的缺点是不能正确复制一些非确定性的函数,比如UUID()、NOW()等,也不能复制一些特殊的操作,比如LOAD DATA INFILE、用户自定义函数等。另外,Statement格式可能会造成主从数据不一致的问题,比如在主库上执行了一个更新多行数据的SQL语句,但由于主从库上的数据顺序不同,导致在从库上执行时更新了不同的行。

Row格式

Row格式是MySQL 5.7之后的默认格式,它记录了每一行数据被修改前后的值,而不记录SQL语句本身。Row格式的优点是能够保证主从数据的一致性,不受非确定性函数或特殊操作的影响,而且能够提高从库重放日志的效率。Row格式的缺点是日志文件较大,占用更多的磁盘空间和网络带宽,而且不方便人类阅读和分析。

Mixed格式

Mixed格式是Statement和Row格式的混合,它根据SQL语句的类型自动选择使用哪种格式来记录日志。Mixed格式的优点是能够结合Statement和Row格式的优势,在保证数据一致性的同时减少日志文件大小。Mixed格式的缺点是可能会造成日志切换时产生额外开销,并且在某些情况下仍然无法正确复制。

以下表格对比了三种格式的特点:

格式记录内容日志大小数据一致性复制效率可读性
StatementSQL语句及上下文信息较小可能不一致较低较高
Row每行数据修改前后值较大一致较高较低
Mixed根据SQL类型自动选择中等一般一致中等中等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值