本文介绍: 在执行更新语句时,会记录到redo log和binlog两块日志,以基本事务为单位,redo log在事务的执行过程中能够不断写入,binlog只能在事务提交的时候写入为了解决两份日志之间逻辑一致问题,innodb存储引擎采用了两阶段提交方案,将redo log写入拆成了prepare和commit两个阶段,这就是两阶段提交。
MySQL日志
包括事务日志(redolog undolog)慢查询日志,通用查询日志,二进制日志(binlog)
最为重要的就是binlog(归档日志)事务日志redolog(重做日志)undolog回滚日志
聊聊REDOLOG
为什么需要redolog?
那redolog主要是为了保证数据的持久化,我们知道innodb存储引擎中数据是以页
为单位进行存储,每一个页中有很多行记录来存储数据,我们的数据最终是要持久化到硬盘中,那如果我们每进行一次数据的更新都进行一次磁盘的IO来更新数据页,那这样频繁的磁盘IO说我们承受不起的,所以我们引入了buffer poll
,当我们查询一条记录时会把一整页的数据加载出来放到buffer poll中,后续的查找只需要查找buffer poll中有没有数据,有则更新buffer poll中的数据再进行刷盘操作完成数据持久化,与内存进行IO的效率明显远高于磁盘IO,虽然效率是提高了但我们也发现如果我们的MySQL实例挂了或者宕机,内存中数据丢失,我们更新buffer poll中的数据尚未刷盘到磁盘就会造成数据的丢失。所以们需要redolog日志来保证事务的持久性
redolog是如何保证事务持久性的?
第一步,先将需要更新的记录从磁盘中读入到内存中,修改数据的内存拷贝
redo log的组成(redo log buffer和redo log file )
redo log buffer的刷盘时机
聊聊BINLOG
binlog记录什么?
为什么需要binlog?
binlog的记录格式
binlog的写入机制
什么是两阶段提交?
binlog和redo log的区别
聊聊undo log
什么是undo log
undo log的作用
undo的存储结构
回滚段中的数据分类
undo log的类型
详细生成过程
新增操作的undo log
不更新主键的undo log
更新主键的undo log
删除操作的undo log
purage线程的作用
purage线程的作用
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。