Mysql是事务提交是怎么保证性能和安全性地写进磁盘的?答案当然是著名的WAL机制了,这里我们的介绍下Mysql的这种机制实现和对应参数配置!
Binlog日志
binlog的写入逻辑:事务执行过程中,先把日志写到binlogcache,事务提交的时候,再把binlogcache写到binlog文件中。
也就是可以分为先写到binlogcache缓存中,直接写内存就很快了,性能问题可以解决。mysql解决磁盘数据持久化的方案是根据参数sync_binlog配置的值来解决同步或者异步持久化。
1.sync_binlog=0的时候,表示每次提交事务都只write,不fsync;2.sync_binlog=1的时候,表示每次提交事务都会执行fsync;3.sync_binlog=N(N1)的时候,表示每次提交事务都write,但累积N个事务后才fsync。
Redolog日志
Binlog是mysql的server层的日志,也可以说是mysql自己的日志。但是作为小三转正的Innodb外来者,也会带有自己的日志来补充Binlog的不足,这就是Redolog和Undolog。Redolog存的是业务逻辑,用于事务执行过程中异常崩溃恢复。
原理都一样,要想性能高,就得先写到cache中,Redolog会被先写到redologbuffer中,后面根据参数配置值来持久化到磁盘里。
redolog的写入策略,InnoDB提供了innodb_flush_log_at_trx_