2023-2更文11-mysql日志总结

78 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情

mysql日志总结

前文

本文中主要的内容是对于mysql日志相关知识的总结,包括日志的分类、日志的应用场景、日志带来的数据回滚和主从复制等等内容。

mysql日志

mysql日志分类

提到mysql的日志,首先来了解一下关于日志的分类信息。mysql的日志主要是分为三种:

  • undo log
  • redo log
  • bin log

先来了解一下什么是undo log。undo log一般为mysql的事务开始执行时,存储引擎会将数据库执行前的状态存储到undo log当中。众所周知的事务回滚功能,其实主要是通过undo log来进行实现。当事务执行时一旦出现异常,事务要面临回滚。而事务提交前,实际上索引会更新buffer pool中的数据缓存值,但此时并未写入磁盘。事务回滚时会从undo log中进行更新前数据读取,并重新将原始数据写入到buffer pool中。

看完了undo log,再来了解一下redo log的相关知识。redo log与undo log写入的时间不同,redo log主要是会在整个事务执行完成后,再将数据写入。显然,redo log的作用也有所不同,主要是用于当磁盘突然发生断电等意外情况时,重启mysql后需要进行数据的恢复。redo log会在每个事务完成时写入,当意外断电时,需要数据恢复就会在redo log中进行数据的读取,保证数据的一致性。

redo log之后再看一下bin log,bin log的存储位置与前面两个又有所区别。bin log主要是在mysql的服务层进行存储,而不是像前两个存储在引擎层。而bin log的作用也不一样,它是主要用于mysql的主从复制,而不是用于断电等情况下的数据恢复。mysql主从库之间的数据复制,主要是通过主库写入bin log,并将其发送到从库中,而从库再进行数据的更新。

mysql三种日志的区别

再来对比一下三种mysql的日志,undo log在事务开始前进行存储,而redo log和bin log在事务执行后进行存储。undo log主要用于事务的回滚,redo log用于异常断电情况下数据的恢复,而bin log用于主从数据库的数据复制。redo log和bin log会进行二阶段的提交方式的存储,以此方式避免异常断电时恢复的数据与从库数据不一致的问题,保证redo log与bin log的数据一致性。

总结

本文主要是对mysql的三种日志相关知识及应用场景进行了总结,分析了三种日志在不同情况下的使用。