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 格式需要根据具体的应用需求和环境来决定,以确保在性能和数据一致性之间找到最佳平衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理冈塞雷斯第四版课后习题答案【英文原版】

第二章 第三章 . 第四章 傅里叶变换是一个线性过程,而计算梯度的平方根和平方根则是非线性运算。傅里叶变换可以用来计算微分的差值(如问题4.50),但必须在空间域中直接计算平方和平方根值。 (a)实际上,由于高通操作,环有一个暗中心…

在已创建的git工程中添加.gitignore

有些代码创建git时,为了方便将所有文件都加入了git管理,但实际有些库的Makefile文件和编译目录的文件不需要加入管理,否则每次提交或编译后,git diff将看到非常多的冗余信息。而我们修改的核心代码都淹没在这些大量无用的信息里面…

Golang:gammazero/deque是一个快速环形缓冲区deque(双端队列)实现

gammazero/deque是一个快速环形缓冲区deque(双端队列)实现。 文档 https://github.com/gammazero/deque 安装 go get github.com/gammazero/deque代码示例 先入先出队列 package mainimport ("fmt""github.com/gammazero/deque&quo…

留守儿童|基于SprinBoot+vue的留守儿童爱心网站(源码+数据库+文档)

留守儿童爱心网站 目录 基于SprinBootvue的留守儿童爱心网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&…

STM_HAL_TIM_IC_(输入捕获,捕获PWM波)

介绍 TM32微控制器提供了输入捕获(Input Capture)功能,这是一种用于精确测量外部信号脉冲宽度和周期的强大技术。输入捕获通常与定时器(如TIM)的高级控制定时器(TIM1和TIM8)或通用定时器&#…

MySQL之Schema与数据类型优化和创建高性能的索引(一)

Schema与数据类型优化 只修改.frm文件 从前面的例子中可以看到修改表的.frm文件是很快的,但MySQL有时候会在没有必要的时候也重建.如果愿意冒一些风险,可以让MySQL做一些其他类型的修改而不用重建表。下面这些操作是有可能不需要重建表的: 1.移除(不是…

JavaEE-文件IO2

文章目录 前言一、字节流1.1 读文件1.2 写文件 二、字符流2.1 读文件2.2 写文件 三、文件IO三道例题 前言 在这里对Java标准库中对文件内容的操作进行总结,总体上分为两部分,字节流和字符流,就是以字节为单位读取文件和以字符为单位读取文件…

[AI Google] 介绍 VideoFX,以及 ImageFX 和 MusicFX 的新功能

VideoFX 是来自 labs.google 的最新实验,您可以查看音乐效果和图像效果的新更新,现在在 110 多个国家可用。 生成式媒体正在改变人们构思创意并增强我们的创造力能力的方式。我们致力于与创作者和艺术家合作构建人工智能,以更好地理解这些生成…

cmake使用交叉编译工具链并验证

目录 一、内容 二、配置 1. 准备cmake文件 2. 使用交叉编译 三、验证 1. 构建阶段验证 2. 编译阶段验证 一、内容 目的:在X86环境下编译ARM平台软件 编写交叉编译配置文件:xx.cmake 执行cmake命令时指定:cmake \ -DCMAKE_TOOLCHAIN_F…

Linux Crontab:看完这篇,还有啥不懂的吗

在Linux系统管理中,自动化是一个至关重要的概念,它可以帮助我们节省时间、减少错误并提高效率。crontab> 是实现这一目标的强大工具,它允许我们安排任务在特定的时间自动执行。本文将详细介绍 crontab 的基础概念、语法、命令、高级技巧以…

K8S认证|CKA题库+答案| 12. 查看Pod日志

目录 12、查看Pod日志 CKA v1.29.0模拟系统免费下载试用: 题目: 开始操作: 1)、切换集群 2)、提取错误日志 3)、验证提取结果 12、查看Pod日志 CKA v1.29.0模拟系统免费下载试用: 百度…

简单的UDP网络程序:多人群聊系统

本章重点 能够实现一个简单的udp客户端/服务器; 1.创建套接字 我们把服务器封装成一个类,当我们定义出一个服务器对象后需要马上初始化服务器,而初始化服务器需要做的第一件事就是创建套接字。 ⭐参数说明: domain:创建套接字的域…

Nginx代理配置(专业版)

写在前面提醒:使用代理,如果可以,请尽量支持双协议,http、https均要支持哈。 注意:监控系统只是运行代码,是否支持https,需要运维同学在你们的服务器上配置https证书,配置好证书&…

在 CentOS 上安装 PostgreSQL 的全面指南

PostgreSQL 是一种功能强大的开源关系型数据库管理系统,广泛应用于各种领域。它提供了诸如事务处理、并发控制和数据完整性等高级功能,因此深受开发者和企业的欢迎。本指南将逐步引导您在 CentOS 上安装 PostgreSQL,以便您充分利用其众多优势…

决定了,将ChatGPTer开源!主打一个大模型人人可用。

一个快速上手且极易部署的类ChatGPT开源应用,可接入 OPENAI API 或 通义千问API 开源地址: https://github.com/isnl/EsChat 大声(偷偷)告诉你:通义千问有免费API额度可白嫖!!! 版本特性 OPENAI 和 通义千…

点云AABB、OBB包围盒计算显示

目录 一、简介 1)AABB包围盒 2)OBB包围盒 二、计算代码 三、加载计算结果

什么是Promise

Promise 是 JavaScript 中的一个对象,用于处理异步操作。它代表了一个最终可能完成(也可能被拒绝)的异步操作及其结果值。Promise 对象用于更复杂的异步编程模式,包括使用 .then() 和 .catch() 链式调用来处理异步操作的结果。 P…

算法提高之区间最大公约数

算法提高之区间最大公约数 核心思想&#xff1a;线段树 1.在区间上加一个数 差分 2.求一段区间的最gcd 求[l,r]的gcd 可以拆解为求**[1,l].sum(差分数组 求出来时l点的值)和[l1,r]**做gcd #include <iostream>#include <cstring>#include <algorithm>usi…

1738. 找出第 K 大的异或坐标值

1738. 找出第 K 大的异或坐标值 题目链接&#xff1a;1738. 找出第 K 大的异或坐标值 代码如下&#xff1a; //列前缀异或和 //参考链接:https://leetcode.cn/problems/find-kth-largest-xor-coordinate-value/solutions/2790359/liang-chong-fang-fa-er-wei-qian-zhui-yi-68…

Docker数据卷(volume)

数据卷 数据卷是一个虚拟目录&#xff0c;是容器内目录与宿主机目录之间映射的桥梁。&#xff08;容器内目录与宿主机目录对应的桥梁&#xff0c;修改宿主机对应的目录&#xff0c;docker会映射到容器内部&#xff0c;相当于修改了容器内的&#xff0c;反之也一样&#xff09;数…