
InnoDB
文章平均质量分 94
爱可生开源社区
成立于 2017 年,以开源高质量的运维工具、日常分享技术干货内容、持续的全国性的社区活动为社区己任;目前开源的产品有:SQL审核工具 SQLE,分布式中间件 DBLE、数据传输组件DTLE。
展开
-
MySQL 核心模块揭秘 | 17 期 | InnoDB 有哪几种行锁?
InnoDB 有哪几种行锁,其中比较特殊的插入意向锁为什么而存在?原创 2024-05-22 15:42:16 · 337 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 16 期 | InnoDB 表锁
server 层。存储引擎。基于以上两层结构,MySQL 的锁也可以分为两大类。server 层的锁,就是让我们头痛不已的元数据锁(MDL)。存储引擎的锁,取决于各存储引擎的实现。InnoDB 支持表锁、行锁、谓词锁(用于空间索引,我们不会介绍)。表锁分为共享锁(S)、排他锁(X)、意向共享锁(IS)、意向排他锁(IX)、AUTO-INC 锁。行锁分共享锁(S)、排他锁(X),以及有点特殊的插入意向锁(普通记录锁(LOCK_REC_NOT_GAP)。间隙锁(LOCK_GAP)。原创 2024-05-17 11:22:54 · 936 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 15 期 | 事务模块小结
👆 事务执行过程中产生的 binlog 日志,写入 binlog 日志文件之前,需要有个临时存放的地方。👆 事务有不同的身份,比如读事务、只读事务、读写事务。这篇文章介绍了读事务、只读事务的身份什么时候会发生变化,以及会发生什么样的变化。👆 这篇文章介绍了开启一个事务的各种 SQL 语句,并且以 BEGIN 为代表,介绍了开始一个事务的过程。👆 事务池和管理器是事务模块的基石,把它们的初始化过程作为专栏的第一篇文章,再合适不过了。👆 回滚整个事务,属于我们经常用到的功能,这篇文章介绍了回滚整个事务的过程。原创 2024-04-24 14:15:43 · 503 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 13 期 | 回滚到 savepoint
回滚整个事务,主要分为三大步骤。第 1 步,执行 binlog 回滚操作,其实什么也没干。第 2 步,执行 InnoDB 回滚操作,会把事务执行过程中改变(插入、更新、删除)的记录恢复原样(至少从逻辑上来看是这样的)。最后,还会提交 InnoDB 事务,让回滚操作对数据页的修改生效。第 3 步,清除事务执行过程中产生的、临时存放于 trx cache 中的 binlog 日志。本期问题:关于本期内容,如有问题,欢迎留言交流。原创 2024-04-18 15:50:41 · 1110 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 11 期 | InnoDB 提交事务,提交了什么?
InnoDB 提交事务,就像我们填完一个表格之后,最后盖上的那个戳,总体上来说,要干 3 件事。第 1 件,修改分配给事务的各 undo 段的状态。如果数据库发生崩溃,重新启动后,undo 段的状态是影响事务提交还是回滚的因素之一。第 2 件,修改事务对象的状态。如果数据据库一直运行,不发生崩溃,就靠事务对象的状态来标识事务是否已提交。第 3 件,把各 undo 段中的 undo 日志组加入链表。其它事务都不再需要使用这些 undo 日志时,后台 purge 线程会清理这些 undo 日志组中的日志。原创 2024-03-28 09:55:29 · 468 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 10 期 | binlog 怎么写入日志文件?
binlog 日志文件包含两部分:内存 buffer、磁盘文件。内存 buffer 的大小固定为 8K。二阶段提交的 flush 子阶段,会从 trx_cache 中读取 binlog 日志,写入 binlog 日志文件。本期问题:如果事务执行过程中产生的 binlog 日志直接写入 binlog 日志文件,会有什么问题吗?欢迎留言交流。下期预告:MySQL 核心模块揭秘 | 11 期 | InnoDB 提交事务,提交了什么?原创 2024-03-21 09:58:54 · 500 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 08 期 | 二阶段提交 (2) commit 阶段
二阶段提交的 commit 阶段分为三个子阶段:flush 子阶段、sync 子阶段、commit 子阶段。flush 子阶段会把 prepare 阶段及之前产生的 redo 日志都刷盘,把事务执行过程中产生的 binlog 日志写入 binlog 日志文件。sync 子阶段会根据系统变量 sync_binlog 的值决定是否把 binlog 日志刷盘。为了避免每个事务各自提交,触发操作系统对同一个页频繁的重复刷盘,InnoDB 引入了组提交。原创 2024-03-06 13:18:39 · 1299 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 07 期 | 二阶段提交 (1) prepare 阶段
开启 binlog 的情况下,用户事务需要使用二阶段提交来保证 binlog 和 InnoDB 表的数据一致性。binlog prepare 什么也不会干。InnoDB prepare 会把分配给事务的所有 undo 段的状态修改为 TRX_UNDO_PREPARED,把事务 Xid 写入 undo 日志组的头信息,把内存中事务对象的状态修改为 TRX_STATE_PREPARED。本期问题:二阶段提交的 prepare 阶段为什么不把 redo 日志刷盘?欢迎大家留言交流。下期预告。原创 2024-02-29 13:29:01 · 1201 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 06 期 | 事务提交之前,binlog 写到哪里?
trx_cache 分为两级:内存(buffer)、临时文件。事务执行过程中,产生的所有 binlog event 都要写入 trx_cache。binlog event 写入 trx_cache,通常情况下,都会先写入 buffer,写满 buffer 之后,再把 buffer 中所有内容都写入临时文件,最后清空 buffer。本期问题:如果 buffer 是空的,接下来要写入一个 86K 的 binlog event 到 trx_cache,写入流程是什么样的?欢迎大家留言交流。下期预告。原创 2024-02-21 17:23:34 · 1111 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 05 期 | 读事务和只读事务的变形记
如果执行的第一条 SQL 语句是 update 或 delete,在 SQL 语句执行过程中,读事务会变成读写事务,只读事务会分配事务 ID 和用户临时表的回滚段。如果执行的第一条 SQL 语句是 select,在后续第一次执行 insert、update、delete 三种语句的其中一种时,读事务会变成读写事务,只读事务会分配事务 ID 和用户临时表的回滚段。分配事务 ID。为用户普通表分配回滚段。把事务对象加入链表。本期问题:关于本期内容,如有问题,欢迎留言交流。下期预告。原创 2024-01-31 15:22:25 · 1101 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 04 期 | 终于要启动事务了
InnoDB 开启内部事务,是为了改变表中数据,所以,内部事务都以读写事务的身份启动。执行的第一条 SQL 语句是 select、update、delete,以读事务身份启动事务。执行的第一条 SQL 语句是 insert,以读写事务身份启动事务。如果只读事务执行的第一条 SQL 语句是插入记录到用户临时表的 insert,也会分配事务 ID。本期问题:mysql_trx_list、rw_trx_list 这两个链表分别用来干什么?欢迎留言交流。下期预告。原创 2024-01-24 13:20:51 · 937 阅读 · 0 评论 -
技术分享 | 只有.frm和.ibd文件时如何批量恢复InnoDB的表
作者:姚远专注于 Oracle、MySQL 数据库多年,Oracle 10G 和 12C OCM,MySQL 5.6 ,5.7,8.0 OCP。现在鼎甲科技任顾问,为同事和客户提高数据库培训和技术支持服务。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。背景很多时候因为 MySQL 数据库不能启动而造成数据无法访问,但应用的数据通常没有丢失,只是系统表空间等其它文件损坏了,或者遇到 MySQL 的 bug。这个时候如果没有备份,很多人就以为数据丢失原创 2020-07-28 17:04:49 · 228 阅读 · 0 评论 -
技术分享 | InnoDB Handler_read_* 变量解释
作者:高鹏文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。源码版本:percona 5.7.14本文为学习记录,可能有误请谅解。本文建议PC端观看,效果更佳。一、Handler_read_* 值的实质内部表示如下:{"Handler_read_first", (char*) offsetof(ST...转载 2019-10-31 16:57:47 · 351 阅读 · 0 评论 -
技术分享 | InnoDB 表空间加密
本文目录:一、表空间加密概述应⽤场景加密插件加密限制注意事项二、加密表空间安装加密插件配置表空间加密查看表空间被加密的表三、更新 master encryption key四、导⼊导出案例五、备份恢复innobackupex六、参考文档表空间加密概述从 5.7.11 开始,InnoDB 支持对独立表空间进行静态数据加密。该加密是在引擎内部数据页级别的加密手...原创 2019-10-09 16:57:07 · 830 阅读 · 0 评论