1.MySQL · 源码分析 · Subquery代码分析
2.MySQL全文索引源码剖析之Insert语句执行过程
3.MySQL XA事务源码分析
4.MySQL源码包下载与使用教程详解mysql下载源码包教程
5.MySQL源码阅读4-do_command函数/功能类命令
6.DockerMySQL 源码构建 Docker 镜像(基于 ARM 64 架构)
MySQL · 源码分析 · Subquery代码分析
子查询在MySQL中的码文处理方式,主要涉及到其在条件/投影中的码文应用。它们以Item_subselect这个表达式类的码文子类形式存在,描述结构丰富多样。码文所有子查询在MySQL中以Item_subselect为基类,码文包含相关或非相关的码文cmake管理源码类型,且具有特定的码文标记来描述其性质。子查询的码文执行方式在Subquery_strategy枚举中被明确,共有五种最终执行方式。码文处理流程分为prepare、码文optimize和execute三个阶段。码文在prepare阶段,码文子查询通过抽象语法树进行初步构建,码文主要完成将子查询转换为衍生表或选择性执行的码文逻辑。optimize阶段根据代价估算决定子查询的码文执行策略,包括物化执行或EXISTS方式。execute阶段,依据优化阶段确定的策略执行子查询。总结而言,inputstream源码子查询的处理流程在MySQL中较为复杂,特别是在prepare阶段的转换逻辑,但整体处理思路清晰。通过这种方式,MySQL能够高效地处理子查询,实现数据查询和分析的复杂需求。
MySQL全文索引源码剖析之Insert语句执行过程
本文来源于华为云社区,作者为GaussDB数据库,探讨了MySQL全文索引源码中Insert语句的即刻源码执行过程。
全文索引是一种常用于信息检索的技术,它通过倒排索引实现,即单词和文档的映射关系,如(单词,(文档,偏移))。以创建一个表并在opening_line列上建立全文索引为例,插入'Call me Ishmael.'时,文档会被分为'call',tikv 源码 'me', 'ishmael'等单词,并记录在全文索引中。
全文索引Cache的作用类似于Change Buffer,用于缓存分词结果,避免频繁刷盘。Innodb使用fts_cache_t结构来管理cache,每个全文索引的表都会在内存中创建一个fts_cache_t对象。
Insert语句的执行分为三个阶段:写入行记录阶段、事务提交阶段和刷脏阶段。写入行记录阶段生成doc_id并写入Innodb的viabtc源码行记录,并将doc_id缓存。事务提交阶段对文档进行分词,获取{ 单词,(文档,偏移)}关联对,并插入到cache。刷脏阶段后台线程将cache刷新到磁盘。
全文索引的并发插入可能导致OOM问题,可通过修复patch #解决。当MySQL进程崩溃时,fts_init_index函数会恢复crash前的cache数据。
MySQL XA事务源码分析
事务类型外部 XA PREPARE 流程
省流版:
详细版:
外部 XA COMMIT 过程
省流版:
详细版:
外部 XA 2PC 阶段 Log 落盘顺序
------------------- XA PREPARE START -------------------------
------------------- XA PREPARE END -------------------------
.
.
.
.
.
.
------------------- XA COMMIT START -------------------------
------------------- XA COMMIT END -------------------------
本地事务 commit 流程
省流版
与外部 XA PREPARE 2PC 的不同
与外部 XA COMMIT 的不同
详细版:
------------------- PREPARE START -------------------------
------------------- PREPARE END -------------------------
------------------- COMMIT START -------------------------
------------------- COMMIT END -------------------------
外部 XA ROLLBACK 流程
省流版(Not Prepared Rollback 和 Prepared Rollback 的不同之处)
详细版
Not Prepared Rollback(在 end - prepare 之间 rollback)
Prepared Rollback(在 prepare 之后 rollback)
外部 XA RECOVERY 流程
省流版
详细版
本地事务 RECOVERY 流程
省流版
详细版
为什么只遍历最后一个binlog文件:
rotate 到新的 binlog 文件前,redo log 强制落盘,因此redo commit记录会落盘,保证老的binlog文件没有正在提交的事务
MySQL源码包下载与使用教程详解mysql下载源码包教程
MySQL源码包下载和使用教程详解
MySQL是一种流行的开源关系型数据库管理系统,广泛应用于Web应用程序和企业级应用程序中。MySQL有一个庞大的社区贡献了大量的代码和文档,所以它拥有丰富的特性和功能。这篇文章将向您介绍如何下载和使用MySQL源码包。
下载MySQL源码包
MySQL源码包可以从官方网站下载(f文件是构建过程中的关键组件。虽然原Dockerfile需要调整以消除EOF块的报错,但整个过程需要细心处理和定制化以适应ARM平台。
万字长文~vue+express+mysql带你彻底搞懂项目中的权限控制(附所有源码)
本文详细介绍如何使用 Vue, Express 和 MySQL 实现项目中的权限控制。主要分为后端权限和前端权限两个部分。后端权限主要包括:
确定请求发出的用户(角色)身份; 采用基于角色的访问控制(RBAC)模式进行权限设计。RBAC模式涉及以下步骤:
后端建立角色表、菜单表(或角色菜单表)和用户表。 用户通过用户名和密码登录,系统根据登录信息返回对应角色的菜单树数据。 登录后,系统返回的菜单树数据通过前端进行处理和渲染,生成菜单。前端权限主要包含:
菜单权限:根据角色展示不同菜单; 页面权限:限制不同角色访问页面; 按钮权限:控制按钮的可见性和交互; 字段权限:针对特定字段进行权限控制。实现过程中,需要关注数据库设计、权限管理逻辑以及前端组件的交互。代码和具体实现细节可参考 GitHub 仓库。