首页 > 数据库 >mysql之binlog的写入时机

mysql之binlog的写入时机

时间:2024-12-10 18:11:05浏览次数:6  
标签:binlog 事务 缓存 写入 mysql 一致性 日志

 

MySQL 的二进制日志(binlog)是记录数据库更改事件的一种日志文件。它用于数据恢复、复制和审计。以下是 MySQL binlog 写入的几个关键时机及其详细说明:

 

1. 事务提交时

  • InnoDB 存储引擎:对于支持事务的 InnoDB 引擎,binlog 是在事务提交时写入的。这确保了日志中只记录已完成的事务,从而保证复制和恢复的一致性。
  • 事务提交顺序:在事务提交过程中,事务的更改会首先被写入到 InnoDB 的重做日志(redo log),确认写入后,binlog 会记录这些更改,然后实际提交事务。

2. 语句成功执行后

  • 对于非事务性表(如 MyISAM):MyISAM 等不支持事务的存储引擎,每个成功执行的 SQL 语句都会立即将其变更写入 binlog 。这并没有事务控制,因此存在一致性问题。

3. 表结构变更

  • DDL 语句:用于定义结构的语句(例如,CREATE 、ALTER 、DROP)在成功执行后立即写入 binlog 。这通常是原子性的,并会确保在复制环境中结构变更的同步。

4. 事务回滚不写入

  • 事务被回滚时:对于 InnoDB 存储引擎,事务在回滚时不会写入 binlog,因为回滚操作意味着实际数据没有变化,不需要记录。

5. 主从复制

  • 在主服务器(Master)上完成写入操作并记录在 binlog 之后,这些记录会被传送到从服务器(Slave),作为复制的一部分,Binlog 用于保证从库与主库数据状态的一致性。

6. 临时表操作

  • 对于临时表的操作,由于它们在会话结束时自动删除,因此这些操作不会写入 binlog 。但是,如果临时表的操作影响到永久表(例如,INSERT...SELECT),就会记录相关变更。

7. 缓存刷新

  • Binlog 缓存:MySQL 使用一个二进制日志缓存以便更好地处理事务。缓存中的内容在事务提交时被刷新到 binlog,确保事务的一致性。

8. 日志文件切换

  • Binlog 在达到预设的大小限制时自动轮转,生成新的 binlog 文件。

通过对这些写入时机的理解,我们可以更好地利用 binlog 进行数据恢复、性能优化和数据库审计等各种场景。在实际应用中,可以通过配置(如同步设置、 binlog 格式等)来调整和优化 binlog 的表现和行为。

 

序号写入时机详细说明
1 事务提交时 对于 InnoDB 引擎,事务提交时写入 binlog,确保记录的都是已完成的事务,保证一致性。
2 语句成功执行后 对于非事务性表如 MyISAM,每个成功执行的 SQL 语句立即写入 binlog,缺乏事务一致性控制。
3 表结构变更 DDL 语句(CREATE 、ALTER 、DROP)成功执行后立即写入 binlog,确保复制环境中结构变更同步。
4 事务回滚不写入 对于 InnoDB 引擎,事务回滚时不写入 binlog,因为实际数据未更改,无需记录。
5 主从复制 在主服务器上事务写入 binlog 后,记录传送到从服务器,确保主从数据一致性。
6 临时表操作 临时表操作不会写入 binlog,但如果影响永久表的变更(如 INSERT...SELECT)就会记录相关更改。
7 缓存刷新 使用 binlog 缓存处理事务,缓存内容在事务提交时刷新到 binlog,确保事务的一致性。
8 日志文件切换 当 binlog 达到预设大小限制时,自动切换到新的 binlog 文件,管理日志大小和数量。

标签:binlog,事务,缓存,写入,mysql,一致性,日志
From: https://www.cnblogs.com/auv2009/p/18597793

相关文章

  • mysql 大表drop和truncate 技术风险点
    1、用这个drop语句举例:droptableT;在之前的老版本中,但如果表T比较大,占用的各种缓存较多,这个SQL在对表进行删除的时候,需要依次清理掉bufferpool中的page,时间久回比较久;清理的动作会影响到在线的业务;在老版本的内核中的大致逻辑如下:扫描lru链表,如果page属于T表,就从lru链表,hash......
  • 【MySQL开发】常用指标采集 exporter
    https://github.com/prometheus/mysqld_exporterhttps://blog.csdn.net/qq_31555951/article/details/109496622https://help.aliyun.com/zh/prometheus/use-cases/monitor-mysql-databases可用性表示MySQL实例是否已停机mysql_up表示数据库正常运行的时长,通常使用该指标......
  • 博客-django--MySQL--报错版本低
    报错信息django.db.utils.NotSupportedError:MySQL8orlaterisrequired(found5.7.31).原因因为mysql5.7及以下是免费的数据库,8.0之后是收费的。使用免费的数据库更放心,使用上没有什么区别。这个提示只是Django的版本检测提示,把它注释掉就好了。解决办法注释掉版本检测......
  • PbootCMS默认使用哪种数据库?如何切换到MySQL数据库?
    PbootCMS默认使用SQLite数据库,这种数据库不需要额外的配置和导入操作,适合快速部署和小型项目。如果需要切换到MySQL数据库,你需要按照以下步骤操作:导入数据库文件:首先,你需要将MySQL数据库文件(通常位于/static/backup/sql/xxx.sql)导入到你的MySQL服务器中。你可以使用phpMyAdmin......
  • PbootCMS中哪些目录需要设置777写入权限?
    在PbootCMS中,为了确保系统的正常运行,有三个目录需要设置777写入权限。这些目录分别是:config目录:用途:存放授权码和数据库配置文件。重要性:确保系统能够读取和写入配置文件,从而保证系统的稳定性和安全性。data目录:用途:存放SQLite数据库文件。重要性:确保系统能够读取......
  • PbootCMS后台登录提示“登录失败:数据库目录写入权限不足!”如何解决?
    当在PbootCMS后台尝试登录时,如果遇到“登录失败:数据库目录写入权限不足!”的错误提示,这通常是由于数据库存放目录没有足够的写入权限导致的。解决这个问题的方法如下:检查数据库目录权限:登录到服务器,进入PbootCMS的根目录。找到data目录,该目录用于存放sqlite数据库文件。......
  • 服务迁移之《mysql数据同步问题》
    我们大概是从2022年十月份开始进行拆分的。面对一百多个服务的时候,真的是无从下手,然后公司突然空降了一个从阿里出来的架构师,然后就带着我们大刀阔斧的整体迁移。先是服务器购买阿里云的,然后从几个核心的服务开始迁移,发现会依赖很多的基础的原子服务。然后就开始迁移基础,基础服务......
  • Windows安装Mysql数据库|非官方复杂安装,解压即可,操作简单
    我们都知道在官方安装mysql数据库极其复杂,还极大概率遇到各种问题,今天教大家只要解压就可安装完数据库,操作及其简单+绿色。版本包括了mysql8或mysql5,各位各取所需即可。不管你之前是否安装过数据库,只要端口3306不被占用就可以成功安装mysql。下载解压包下载移步https://pan......
  • 金仓数据库数据迁移实战:从MySQL到KES的顺利迁移
    今天我们将开始实践金仓数据库的数据迁移功能。在此之前,我们一直使用的是简化版的Docker镜像,这个版本并没有集成可视化操作工具。因此,为了更方便地进行后续的操作,我们需要额外下载一个Windows版本的安装包并进行安装。需要注意的是,如果你不打算安装数据库,安装过程中可以选择......
  • Mysql索引失效问题demo
    Mysql索引失效问题demo#1.准备工作CREATETABLE`user`(`id`INTNOTNULLAUTO_INCREMENT,`code`VARCHAR(20)COLLATEutf8mb4_binDEFAULTNULL,`age`INTDEFAULT'0',`name`VARCHAR(30)COLLATEutf8mb4_binDEFAULTNULL,`height`INTDEFAULT&#......