目 录CONTENT

文章目录

MySql三种日志

FatFish1
2025-05-20 / 0 评论 / 0 点赞 / 18 阅读 / 0 字 / 正在检测是否收录...

redo日志

概念

redo日志用于故障后恢复修改内容

redo日志的做法是记录事务修改了哪个页哪个偏移量,修改了几个字节的值,以及记录被修改的内容

mini-transaction

MySql中一次对底层页面的原子访问过程称为一个mini-transaction,简称mtr

例如一条insert语句,可能底层有很多步骤,但是它们在宏观上已经不可分割了,就是一个mini-transaction,即一个原子操作

宏观上的事务中可能有多条语句,每个语句中可能有多个mtr,每个mtr可能记录多条redo日志

redo缓冲区

mysql本身有buffer pool作为缓冲区,redo日志同样也有缓冲区,是redo log buffer,是一片连续的内存空间

当redo log buffer空间不足时,redo日志就会刷新到磁盘上

undo日志

概念

undo日志用于事务回滚,对任何改动例如INSERT、DELETE、UPDATE等,都要记录其回滚所需的东西

为了实现事务的原子性 ,InnoDB 存储引擎在实际进行增、删、改一条记录时,都需要先把对应的 undo日志记下来。一般每对一条记录做一次改动,就对应着一条 undo日志

binlog二进制操作日志

binlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog是MySQL的逻辑日志,并且由Server层进行记录,使用任何存储引擎的MySQL数据库都会记录binlog日志。

  • 逻辑日志:可以简单理解为记录的就是SQL语句

  • 物理日志:因为MySQL数据最终是保存在数据页中的,物理日志记录的就是数据页变更

binlog是通过追加的方式进行写入的,可以通过max_binlog_size参数设置每个binlog文件的大小,当文件大小达到给定值之后,会生成新的文件来保存日志。

在实际应用中,binlog的主要使用场景有两个,分别是主从复制和数据恢复

  • 主从复制:在Master端开启binlog,然后将binlog发送到各个Slave端,Slave端重放binlog从而达到主从数据一致

  • 数据恢复:通过使用mysqlbinlog工具来恢复数据

只有在事务提交时才会记录biglog,此时记录还在内存中,MySQL通过sync_binlog参数控制biglog的刷盘时机,取值范围是0-N:

  • 0:不去强制要求,由系统自行判断何时写入磁盘;

  • 1:每次commit的时候都要将binlog写入磁盘;

  • N:每N个事务,才会将binlog写入磁盘。

0

评论区