mysql先写日志再写磁盘_Mysql原理(四) 数据与日志

本文介绍了MySQL中的WAL(Write-Ahead-Logging)机制,包括redo log和bin log的作用。redo log记录更新操作,遵循两阶段提交过程,确保crash-safe;bin log用于主从复制和数据恢复。MySQL在内存满、日志过多或空闲时执行flush操作,通过调整参数如innodb_max_dirty_pages_pct和sync_binlog来平衡性能和安全性。WAL机制中的组提交和延迟同步策略能有效减少磁盘I/O,提高系统性能。
摘要由CSDN通过智能技术生成

在Mysql中经常会听到WAL机制(Write-Ahead-Logging),主要讲了数据在操作的时候先进行写日志,然后再将数据写入磁盘的过程。之前提到过Mysql中的两个重要的日志文件redo log和bin log。

redo log:Mysql分配给redoLog固定大小区域记录日志,该日志采用循环写从头写到尾然后在从头,同时还有一个记录擦除日志位置的标记checkpoint。当写入点和checkpoint在同一个位置,则停止写日志。如果数据库异常后,提交后的记录不会丢失称为crash-safe

bin log:称为归档日志,是追加写不会覆盖之前的日志。所以可以根据binlog日志可以完成主从备份、数据订阅、恢复数据等工作。

之前也提到mysql执行一条update语句遵从两阶段提交过程,整个流程如下

1.先通过引擎找到对应的行数据

2.对行数据进行修改并调用引擎接口修改这条数据

3.redo log记录更新流程此时处于prepare状态,告知mysql执行器完成操作

4.执行器生成binlog并写入磁盘

5.执行器调用引擎提交事务接口,redo log状态变为commit状态完成整个更新操作。

Redo log进行flush操作

Mysql在记录redo log的时候会先将数据写入到内存中,然后通过flush将内存中的数据写入磁盘中。再次期间会产生脏数据页导致内存和磁盘的数据不一致。这时候mysql就需要刷脏数据页。

Mysql什么时候执行flush操作?

1.当记录redo log的内存满了,会停止写入redo log操作。

2.写入日志太多,发现分配的内存不够,这时候需要淘汰一部分数据页。

3.mysql空闲时会进行f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值