23 | MySQL是怎么保证数据不丢的?
2019-01-04 林晓斌
今天这篇文章,我会继续和你介绍在业务高峰期临时提升性能的方法。从文章标题“MySQL是怎
么保证数据不丢的?”,你就可以看出来,今天我和你介绍的方法,跟数据的可靠性有关。
在专栏前面文章和答疑篇中,我都着重介绍了WAL机制(你可以再回顾下第2篇、第9篇、第12
篇和第15篇文章中的相关内容),得到的结论是:只要redo log和binlog保证持久化到磁盘,就
能确保MySQL异常重启后,数据可以恢复。
评论区有同学又继续追问,redo log的写入流程是怎么样的,如何保证redo log真实地写入了磁
盘。那么今天,我们就再一起看看MySQL写入binlog和redo log的流程。
binlogbinlog的写入机制的写入机制
其实,binlog的写入逻辑比较简单:事务执行过程中,先把日志写到binlog cache,事务提交的
时候,再把binlog cache写到binlog文件中。
一个事务的binlog是不能被拆开的,因此不论这个事务多大,也要确保一次性写入。这就涉及到
了binlog cache的保存问题。
系统给binlog cache分配了一片内存,每个线程一个,参数 binlog_cache_size用于控制单个线程
内binlog cache所占内存的大小。如果超过了这个参数规定的大小,就要暂存到磁盘。
事务提交的时候,执行器把binlog cache里的完整事务写入到binlog中,并清空binlog cache。状
评论0
最新资源