天天看点

数据库的binlog、redolog以及undolog

1. binlog

1.1 binlog:记录了数据库表结构和表数据的变更(update/delete/insert/create/truncate),不记录select操作,存储的是逻辑操作,如“为id=3这一行的count字段加1”。

1.2 binlog的作用:①用户检索的数据是从搜索引擎得到的,但是我们修改数据是直接操作的数据库,所以数据库的变更要同步到搜索引擎。通过监听binlog的变更,可以对搜索引擎进行更新。②对于一主多从的架构,从机的数据复制通过binlog实现;③数据库的数据被清空,可以通过binlog对数据进行恢复。

2. redolog

2.1 redolog:MySQL的基本存储结构是页,所以mysql在修改数据时,先把数据所在的页加载到内存并修改,是物理操作,然后会写入redo log(保存的是在某个数据页做了什么修改)。

2.2 redolog的作用:如果内存把数据改了,但是还没异步写入磁盘(如果每次都立马写入磁盘,那么速度很慢),此时数据库挂了,那么这次数据就丢失了。所以为了避免这种情况,每次内存操作数据后,都在redolog中记录(顺序IO,写入速度快),以便之后恢复(redolog体积小,恢复速度快)。

2.3 在事务提交时,是两阶段提交(2PC)。如果SQL语句都执行成功,那么完成prepare过程;然后写入binlog,接着写入redolog,完成提交。

3. undolog

3.1 undolog:①可以用于MVCC,②可以使用undolog回滚。

3.2 redolog是针对数据页的修改,且是前滚操作,物理操作;而undolog是将行记录回滚,针对的是数据版本,逻辑操作。

4. 写入磁盘策略:通过sync_binlog控制,0表示不强制刷盘,系统自行判断;1表示每次提交事务都写入磁盘;n表示提交n个事务再写入磁盘。

继续阅读