mysql 日志详解 redolog undolog binlog

91 阅读1分钟

undolog

是什么?🤔

  • 回滚日志,保证了原子性。每执行update,delete,insert 都会生成相反的语句
  • 多版本并发控制。

存储的是什么?

数据记录、DB_TRX_ID(执行事物的id)、DB_ROLL_PTR(上一个undolog版本)

图片.png

图片.png

实战 🚀

bufferPool

bufferPool里面是什么

  • 数据页,索引页,undolog页等 为什么需要bufferPool,提高性能,查询先查缓存,更新先更新缓存。出现缓存就会有数据不一致的问题,就需要redolog。比如我们写到bufferPool里去了,但是断电了,这个时候磁盘上还是没有更新的数据,这就不行啊!

redolog 📰

是什么?🤔

  • 重做日志持久性
  • 为了应对上面那个问题,就有一个解决方案,WAL(日志先行),更新bufferPool里的数据页(记得把我标记为脏页)同时写日志。后台会有一个线程把这个脏页刷新到磁盘。

binlog 📰

是什么?🤔

  • 归档日志,用于数据备份,主从复制

怎么用?⚒

  • 每次执行 update,delete,insert 都会 将执行后的写入binlog日志

怎么写?

  • STATEMENT 每条SQL都会记录,主从复制会出现数据不一致,如执行now()函数
  • ROW 数据的最终形态
  • MIXED 混合

总结

mysql的三种日志都有不同的功能,为了实现原子性,使用了undolog,为了实现持久性使用redolog,为了实现数据备份,主从复制使用binlog。我们还介绍了bufferPool,他可以使mysql性能更高。