Mysql事务实现原理

简介: 1)BinLog是Mysql本身就有的,不管使用哪种引擎,都会存在BinLog,而Redo Log是InnoDB引擎特有的。2)BinLog是一种逻辑日志,记录的是对数据库的所有修改操作,而RedoLog是一种物理日志,记录的是每个数据页的修改。3)BinLog具有幂等性,而Redo Log不具有幂等性。4)BinLog开启事务时,会将每次提交的事务一次性写入内存缓冲区,如果未开启事务,则每次成功执行插入、更新和删除语句时,就会将对应的事务信息写入内存缓冲区修改数据,而Redo Log是在数据准备之前将数据写入缓冲区的Redo Log中,然后在缓冲区中修改数据。而且在提交事务时,先将Re

一、Redo Log

Mysql中的事务的原子性和持久性是由Redo Log实现的。Redo Log也被称为重做日志。Redo通常用来记录物理日志。Redo Log包含两部分:

Redo Log Buffer:内存中的日志缓冲,易丢失

Redo Log File: 存放在磁盘中的重做日志,不易丢失

Redo Log四种刷盘规则:

1)通过innodb_flush_log_at_trx_commit决定,其中:

    1的性能最差,即使崩溃,也不会丢失日志

    0是每1s写入日志

    2是每秒写入到buffer中,然后通过fsync同步

2)通过刷新日志频率:innodb_flush_log_at_timeout的值决定

3)当Log Buffer中已经使用的内存超过一半时,也会触发

4)当事务中存在checkpoint时,在一定程度上代表刷写到磁盘日志所在的LSN位置

LSN:日志的逻辑序列号,占8个字节

二、Undo Log

Mysql的一致性由undo log实现的。undo log在Mysql事务的实现中主要作用:回滚事务多版本并发事务 MVCC在Mysql启动事务之前,会先将要修改的数据存储到undo log中。如果事务发生回滚或数据库崩溃,可以利用undo log对数据库中未提交的事务进行回滚操作,从而保证数据的一致性。undo log也会产生Redo Log。由于undolog的完整性和可靠性需要Redo Log来保证。数据库崩溃时,先做Redo Log数据恢复,然后做Undo Log 。

undo Log在Mysql中采用段的方式进行管理,在数据库文件中存在一种叫rollback segment的回滚段,在这个回滚段内部存在1024个undo log segment段。undolog默认存储在共享数据表空间中,默认为idata1文件中。

undo log回滚段中,undo logs分为:

insert undo log(插入)

update undo log(更新和删除)

MVCC:在数据表后面保存了两个隐藏列,保存行的创建版本、保存行的删除版本

DB_TRX_ID、DB_ROLL_PTR、DB_ROW_ID

三、BinLog

一种记录所有Mysql数据库表结构变更以及表数据变更的二进制日志。BinLog的使用场景:主从复制数据恢复

BinLog记录的模式:

row

statement

mixed

row模式:Row模式下的BinLog文件会记录每一行数据被修改情况,然后在mysql从数据库中对相同的数据进行修改。会记录每一行修改的情况。

statement模式:BinLog文件会记录每一条修改数据的Sql语句,Mysql从数据库在复制sql语句的时候,会通过sql进程将BinLog中的sql语句解析成和mysql主数据库执行过的sql语句相同的sql语句,然后在从数据库上执行sql进程解析出来的sql语句。记录数据修改的sql语句。

mixed模式:是row和statement模式的混合。

通常情况下,采用mixed模式mysql的BinLog文件中保存了数据库、数据库表和数据表中的数据的各种更新操作。用来表示修改操作的数据结构叫做日志事件。比较常见的日志事件:Query Event、Row Event、Xid Event等。

BinLog的写入机制:mysql事务提交的时候,会记录事务日志和BinLog日志。其中BinLog日志先于事务日志Redo Log。

根据日志记录模式和操作触发生成日志事件。

在InnoDB存储中,提交事务时,一般会进行两个阶段的操作。

1)修改内存中事务对应的信息,并将日志写入相应的Redo Log Buffer。

2)调用fsync()函数将Redo Log Buffer中的日志信息刷新到磁盘的Redo Log文件中。

四、Bin Log和Redo Log的区别

1)BinLog是Mysql本身就有的,不管使用哪种引擎,都会存在BinLog,而RedoLog是InnoDB引擎特有的。

2)BinLog是一种逻辑日志,记录的是对数据库的所有修改操作,而RedoLog是一种物理日志,记录的是每个数据页的修改。

3)BinLog具有幂等性,而RedoLog不具有幂等性。

4)BinLog开启事务时,会将每次提交的事务一次性写入内存缓冲区,如果未开启事务,则每次成功执行插入、更新和删除语句时,就会将对应的事务信息写入内存缓冲区修改数据,而RedoLog是在数据准备之前将数据写入缓冲区的RedoLog中,然后在缓冲区中修改数据。而且在提交事务时,先将RedoLog写入缓冲区,写入完成后再提交事务。

5)BinLog只会在事务提交时,一次性写入BinLog,其日志的记录方式与事务的提交顺序有关。

6)BinLog是追加写入。RedoLog是循环写入,日志空间的大小是固定的。

7)BinLog一般用于主从复制和数据恢复,并且不具备崩溃自动恢复的能力,而RedoLog是在服务器发生的故障后重启Mysql,用于恢复事务已提交但未写入数据表的数据。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
MySQL锁机制:并发控制与事务隔离
本文深入解析了MySQL的锁机制与事务隔离级别,涵盖锁类型、兼容性、死锁处理及性能优化策略,助你掌握高并发场景下的数据库并发控制核心技巧。
|
4月前
|
存储 监控 Oracle
MySQL事务
MySQL事务具有ACID特性,包括原子性、一致性、隔离性和持久性。其默认隔离级别为可重复读,通过MVCC和间隙锁解决幻读问题,确保事务间数据的一致性和并发性。
MySQL事务
|
5月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
2月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的事务隔离级别
数据库并发访问时易引发数据不一致问题。如客户端读取到未提交的事务数据,可能导致“脏读”。MySQL通过四种事务隔离级别(读未提交、读已提交、可重复读、可序列化)控制并发行为,默认为“可重复读”,以平衡性能与数据一致性。
286 0
|
3月前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
173 0
|
9月前
|
自然语言处理 搜索推荐 关系型数据库
MySQL实现文档全文搜索,分词匹配多段落重排展示,知识库搜索原理分享
本文介绍了在文档管理系统中实现高效全文搜索的方案。为解决原有ES搜索引擎私有化部署复杂、运维成本高的问题,我们转而使用MySQL实现搜索功能。通过对用户输入预处理、数据库模糊匹配、结果分段与关键字标红等步骤,实现了精准且高效的搜索效果。目前方案适用于中小企业,未来将根据需求优化并可能重新引入专业搜索引擎以提升性能。
428 5
|
5月前
|
安全 关系型数据库 MySQL
mysql事务隔离级别
事务隔离级别用于解决脏读、不可重复读和幻读问题。不同级别在安全与性能间权衡,如SERIALIZABLE最安全但性能差,READ_UNCOMMITTED性能高但易导致数据不一致。了解各级别特性有助于合理选择以平衡并发性与数据一致性需求。
188 1
|
5月前
|
SQL 关系型数据库 MySQL
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
|
10月前
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
583 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
|
10月前
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
1108 11

推荐镜像

更多