bin log 和redo log

两者的不同

适用对象

写入方式

日志格式

用途

为什么有了 binlog, 还要有 redo log?

历史遗留问题,早期mysql官方只有binlog日志,且不支持掉电数据恢复。而redo log是InnoDB引擎特有

的,是为了解决buffer pool脏页丢失的问题,只依靠bin log是不能实现crash safe

能不能只用redo,不用binlog

可以的,不考虑主从复制or数据备份的话(即从权限上解决删库跑路的问题),而且bin log默认就是关

闭的

为什么binlogcache是线程私有的,而redo log buffer的就是全局共享的呢?

这是因为一个事务的bin log要求不可以被拆分的,且我们都知道的bin log是用来主从同步的。一个线程

同时只能执行一个事务,基于这个特性,每个线程就得有一个binlogcache。如果不是的话,到时候在从

库执行binlog时,每个事务的命令就会交叉在一起,那这样就会破坏原子性了,这显然是不行的。

而redo log显然就没这个要求