MySQL有了redo log为何还要binlog


MySQL有了redo log为何还要binlog?

其实这个问题应该是反过来说的,因为binlog是比redo log更早。当InnoDB引擎还没有的时候,MySQL默认存储引擎是MyISAM。所以binlog是MySQL通用的日志,存在于Server层,不属于引擎层。binlog只有归档能力,也就是归档日志。有了binlog,MySQL就能实现主备同步,数据恢复等。所以说redo log和binlog并不冲突,反而相辅相成。

binlog是逻辑日志,记录的是SQL语句的原始逻辑。它是追加写入模式,当binlog文件到达一定大小会新建立文件进行写入,并不会覆盖原来的文件。记录的格式有三种,statement、row、mixed。对比一下三种格式的优劣。

statement

记录的是修改的SQL语句,优点是日志文件小,节约IO,挺能高。缺点是准确性差,对一些系统函数不能准确复制或不能复制,入now()、uuid()等。

row

记录的是每行实际数据的变更,优点是准确性高。缺点就是日志文件大,需要更多的网络IO和磁盘IO。

mixed

statemen和row混合,优点是准确性高,文件又没row那么大。缺点是可能发生主从不一致。

如今万兆网络带宽高性能磁盘或者SSD加入,推荐使用row模式。毕竟数据一致性还是首先保障。

小结

  • binlog是server层通用的归档日志。
  • binlog是逻辑日志,追加写入,不会覆盖。
  • binlog有三种格式,statemen、row、mixed,推荐使用row格式。

文章作者: maybe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 maybe !