undolog
是什么?🤔
- 回滚日志,保证了原子性。每执行update,delete,insert 都会生成相反的语句
- 多版本并发控制。
存储的是什么?
数据记录、DB_TRX_ID(执行事物的id)、DB_ROLL_PTR(上一个undolog版本)
实战 🚀
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性能更高。