1 前言
今天这篇文章,继续介绍在业务高峰期临时提升性能的方法。从文章标题“MySQL是怎么保证数据不丢的?”,就可以看出来,今天介绍的方法,跟数据的可靠性有关。
在专栏前面文章中,着重介绍了WAL机制(可以再回顾下MySQL进阶45讲【2】日志系统:一条SQL更新语句是如何执行的?、MySQL进阶45讲【9】普通索引和唯一索引,应该怎么选择?、MySQL进阶45讲【12】为什么你的MySQL偶尔会卡一下文章中的相关内容),得到的结论是:只要redo log和binlog保证持久化到磁盘,就能确保MySQL异常重启后,数据可以恢复。
redo log的写入流程是怎么样的,如何保证redo log真实地写入了磁盘。我们就再一起看看MySQL写入binlog和redo log的流程。
2 binlog的写入机制
其实,binlog的写入逻辑比较简单:事务执行过程中,先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中。
一个事务的binlog是不能被拆开的,因此不论这个事务多大,也要确保一次性写入。这就涉及到了binlog cache的保存问题。
系统