当前位置: 首页 > news >正文

Mysql 的 binlog 有几种格式?

MySQL 的二进制日志(binlog)有三种格式,每种格式都有其特定的用途和优缺点。以下是详细描述:

1. STATEMENT

  • 描述: 记录的是 SQL 语句。
  • 特点:
    • 每条更改数据的 SQL 语句都会记录在 binlog 中。
    • 相对较小,因为只记录了 SQL 语句本身。
  • 优点:
    • 日志量小,减少了 I/O 开销。
    • 更适合基于 SQL 语句的复制。
  • 缺点:
    • 某些情况下,语句在主从服务器上执行的结果可能会不一致(如包含非确定性函数的语句)。
    • 对于某些复杂语句,重放时可能会出问题。
  • 应用场景:
    • 适用于简单、确定性高的 SQL 操作。

2. ROW

  • 描述: 记录的是每一行被修改的具体数据。
  • 特点:
    • 对于每一个被修改的行,记录修改前后的数据。
    • 日志量大,因为需要记录每一行的数据变更。
  • 优点:
    • 更精确,避免了语句格式下可能产生的不一致性。
    • 支持所有类型的 SQL 操作。
  • 缺点:
    • 日志量大,I/O 开销大。
    • 在大数据量操作时,可能会导致 binlog 文件增长迅速。
  • 应用场景:
    • 适用于高一致性要求的环境,尤其是复杂的 SQL 操作和触发器等。

3. MIXED

  • 描述: 结合了 STATEMENT 和 ROW 两种格式的优点。
  • 特点:
    • MySQL 会根据每条 SQL 语句的具体情况,在 STATEMENT 和 ROW 格式之间自动选择。
    • 对于大多数确定性的 SQL 语句,使用 STATEMENT 格式。
    • 对于非确定性 SQL 语句或复杂操作,使用 ROW 格式。
  • 优点:
    • 兼顾了两种格式的优点,在一定程度上减少了 binlog 的大小,同时保证了一致性。
  • 缺点:
    • 复杂度较高,需要 MySQL 自行判断使用哪种格式。
    • 可能在某些情况下无法完全避免 ROW 格式带来的日志量大问题。
  • 应用场景:
    • 适用于需要兼顾性能和一致性的环境。

配置方式

可以通过在 MySQL 配置文件 (my.cnf) 中设置 binlog_format 参数来指定 binlog 的格式:

[mysqld]
binlog_format=STATEMENT  # 或者 ROW, MIXED

也可以在运行时通过 SQL 命令来修改 binlog 的格式:

SET GLOBAL binlog_format = 'STATEMENT';  -- 或者 'ROW', 'MIXED'

总结

  • STATEMENT: 适合简单且确定性高的 SQL 操作,日志量小。
  • ROW: 适合高一致性要求的场景,支持复杂的 SQL 操作,日志量大。
  • MIXED: 结合两者优点,MySQL 自动选择合适的格式,适合需要平衡性能和一致性的场景。

选择适合的 binlog 格式需要根据具体的应用需求和环境来决定,以确保在性能和数据一致性之间找到最佳平衡。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 用Python Pygame做的一些好玩的小游戏
  • 【大数据】MapReduce JAVA API编程实践及适用场景介绍
  • 自回归模型(二):具有自回归误差的回归
  • 数据库缓存 buffer pool详解
  • 科技前沿:IDEA插件Translation v3.6 带来革命性更新,翻译和发音更智能!
  • HyperLPR3 车牌识别
  • 系统架构师-考试-基础题-错题集锦1
  • LLVM Visual Studio构建
  • 【哈希】Leetcode 219. 存在重复元素 II【简单】
  • JJJ:WARN,WARN_ON,BUG_ON
  • k8s pvc pending waiting for first consumer to be created before binding
  • CGAN|生成手势图像|可控制生成
  • Clickhouse 字符串函数使用总结—— Clickhouse基础篇(七)
  • 拼多多携手中国农业大学,投建陕西佛坪山茱萸科技小院
  • wordpress主题模板兔Modown 9.1开心版附送erphpdown v17.1插件
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • export和import的用法总结
  • hadoop集群管理系统搭建规划说明
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java教程_软件开发基础
  • LeetCode29.两数相除 JavaScript
  • mysql中InnoDB引擎中页的概念
  • Python学习之路13-记分
  • Sass Day-01
  • Spring Boot快速入门(一):Hello Spring Boot
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 飞驰在Mesos的涡轮引擎上
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 如何胜任知名企业的商业数据分析师?
  • 深入 Nginx 之配置篇
  • 使用 Docker 部署 Spring Boot项目
  • 学习使用ExpressJS 4.0中的新Router
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 正则学习笔记
  • hi-nginx-1.3.4编译安装
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​2020 年大前端技术趋势解读
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (a /b)*c的值
  • (C)一些题4
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (k8s)kubernetes 部署Promehteus学习之路
  • (第二周)效能测试
  • (二)windows配置JDK环境
  • (九)信息融合方式简介
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (四)事件系统
  • (转)setTimeout 和 setInterval 的区别
  • (转)Sublime Text3配置Lua运行环境