💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 持续学习,不断总结,共同进步,活到老学到老
- 人生的本质是追寻自我的提升,包括思想、能力、意志等等。
- 直面变化,找到背后更基础的东西,更基础的东西是用户的需求。
- 我们的成功是我们的现在和将来决定的。今天和明天已经由昨天决定,你还可以决定后天。
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录
binlog_format 参数十分重要,它影响了记录二进制日志的格式
。在 MySQL5.1 版本之前,没有这个参数。所有二进制文件的格式都是基于 SQL 语句(statement)级别的。同时,对于复制是有一定要求的。如在主服务器运行 rand、uuid 等函数
,又或者使用触发器等操作,这些都可能会导致主从服务器上表中数据的不一致(not sync)。
另一个影响是,会发现 InnoDB 存储引擎的默认事务隔离级别是 REPEATABLE READ
。这其实也是因为二进制日志文件格式的关系,如果使用 READ COMMITTED 的事务隔离级别(大多数数据库,如 Oracle, SQLServer 数据库的默认隔离级别),会出现类似丢失更新的现象,从而出现主从数据库上的数据不一致。
MySQL5.1 开始引入了 binlog_format
参数,该参数可设的值有 STATEMENT、ROW 和 MIXED。
STATEMENT、ROW 的思想类似于 redis 的 RDB 和 AOF.
- STATEMENT 格式和之前的 MySQL 版本一样,二进制日志文件记录的是日志的逻辑 SQL 语句。
在 ROW 格式下,二进制日志记录的不再是简单的 SQL 语句了,而是记录表的行更改情况
。同时,对上述提及的 Statement 格式下复制的问题予以解决。从 MySQL 5.1 版本开始,如果设置了 binlog_format 为 ROW,可以将InnoDB 的事务隔离基本设为 READ COMMITTED
,以获得更好的并发性。- 在 MIXED 格式下,MySQL 默认采用 STATEMENT 格式进行二进制日志文件的记录,但是在一些情况下会使用 ROW 格式,可能的情况有:
- 表的存储引擎为 NDB,这时对表的 DML 操作都会以 ROW 格式记录。
- 使用了 UUIDO)、USERO、CURRENT USERO)、 FOUND ROWS()、ROW COUNT()等不确定函数。
- 使用了 INSERTDELAY 语句。
- 使用了用户定义函数(UDF)。
- 使用了临时表(temporarytable)。
觉得有用的话点个赞
👍🏻
呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙