共计 1217 个字符,预计需要花费 4 分钟才能阅读完成。
本篇文章给大家分享的是有关 MySQL 的 binlog 的格式及优缺点分别是什么呢,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。
MySQL binlog 日志有三种格式,分别为 Statement,MiXED 和 ROW.
1.Statement:每一条会修改数据的 sql 都会记录在 binlog 中。
优点:
binlog 文件较小
日志是包含用户执行的原始 SQL, 方便统计和审计
出现最早,兼容较好
缺点:
存在安全隐患,可能导致主从不一致
对一些系统函数不能准确复制或是不能复制
2.ROW 不记录 sql 语句上下文相关信息,仅保存哪条记录被修改。
优点:
相比 statement 更加安全的复制格式
在某些情况下复制速度更快(SQL 复杂,表有主键)
系统的特殊函数也可以复制
更少的锁
更新和删除语句检查是否有主键,如果有则直接执行,如果没有,看是否有二级索引,如再没有,则全表扫描
缺点:
binlog 比较大(myql5.6 支持 binlog_row_image)
单语句更新(删除)表的行数过多,会形成大量 binlog
无法从 binlog 看见用户执行 SQL(5.6 中增加 binlog_row_query_log_events 记录用户的 query)
3.Mixed: 是以上两种 level 的混合使用,一般的语句修改使用 statment 格式保存 binlog,如一些函数,statement 无法完成主从复制的操作,则采用 row 格式保存 binlog,MySQL 会根据执行的每一条具体的 sql 语句来区分对待记录的日志形式,也就是在 Statement 和 Row 之间选择一种. 新版本的 MySQL 中队 row level 模式也被做了优化,并不是所有的修改都会以 row level 来记录,像遇到表结构变更的时候就会以 statement 模式来记录。至于 update 或者 delete 等修改数据的语句,还是会记录所有行的变更。
优点:
混合使用 row 和 statement 格式,对于 DDL 记录 statument, 对于 table 里的行操作记录为 row 格式。
如果使用 innodb 表,事务级别使用了 READ_COMMITTED or READ_UMCOMMITTED 日志级别只能使用 row 格式。
但是使用 ROW 格式中 DDL 语句还是会记录成 statement 格式。
缺点:
mixed 模式中,那么在以下几种情况下自动将 binlog 模式由 SBR 模式改成 RBR 模式。
当 DML 语句更新一个 NDB 表
当函数中包含 UUID 时
2 个及以上 auto_increment 字段的表被更新时
行任何 insert delayed 语句时
用 UDF 时
视图中必须要求使用 RBR 时,例如创建视图使用了 UUID()函数
以上就是 MySQL 的 binlog 的格式及优缺点分别是什么呢,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。