mysql之redo log和binlog

mysql两个日志

mysql里面有两个很重要,一个是redo log和binlog。

首先来看看redo log,redo log是innodb引擎层面的日志,主要是为了用来crash-safe。那么它是如何实现crash-safe的呢?首先redo log的日志都是append的,都是追加写的,而且redo log也不是可以无限的写入的。
可以这么理解,它是一个环形的日志。其中write pos 和check point, write pos 不断往前写入,当write pos 到达check point时 ,日志就会清除 重新在写入。
首选来介绍一个mysql更新一个语句的流程。首先redo log的日志分为两个阶段,一个阶段是prepare一个是commit。
mysql之redo log和binlog

其实说白了也就是两阶段提交,为啥这样就可以实现crash-safe了呢。
假设在prepare阶段发生了crash,那么binlog日志不会写入,所以重启后可以比对binlog里面的日志,就可以把数据再还原回去。
假如在写入binlog 没有commit时候发生了crash,其实也没关系,因为binlog已经写入,所以启动后,可以对redo log做一个commit。
如果没有两阶段,不管是先写redolog 或者是先写binlog其实都会有问题,你可以想下 哈哈。
那么binlog,为什么是要写入了,其实binlog是用来恢复数据用的。redo log里面的是物理日志,比如记录了数据页的更改,binlog里面是逻辑日志,记录的是语句比如udpate xxx这类的。
总结一下:redo log记录的是物理日志,主要是用来实现crash-safe还有WAL技术。binlog会有恢复数据。

mysql之redo log和binlog

上一篇:使用JMeter测试HTTP接口的方法


下一篇:go 利用beego orm的数据库设计