MySQL内部手册

摘要

这是MySQL内部手册。

有关法律信息,请参见法律通知

需要使用MySQL的帮助,请访问MySQL论坛,在那里你可以和其他MySQL用户讨论你的问题。

文档生成时间:2021-07-31(修订号:579)

表的内容

序言及法律通知
1 MySQL源代码导览
1.1获取源树
1.2主要目录
1.2.1主要目录:BUILD
1.2.2主要目录:client
1.2.3主要目录:myisam
1.2.4主要目录:mysys
1.2.5主要目录:sql
1.2.6主要目录:vio
1.3流
1.4开源目录
1.5存储引擎内部和外部目录
1.6操作系统相关目录
1.7零星杂物
1.8在/sql/sql_update.cc中有一段代码
1.9服务器代码的框架
1.10概述
2编码指南
3可重用类和模板
3.1容器
3.1.1数组
3.1.2 I_P_List
3.1.3 I_List
3.2内存管理
3.2.1 MEM_ROOT
3.3如何扩展本页面
使用CMake构建MySQL服务器
4.1 CMake先决条件
4.2如何安装CMake
4.3快速构建说明
4.3.1释放配置
4.3.2调试配置
4.3.3使用与MySQL官方版本相同的选项构建
4.4详细的构建说明
4.4.1创建Build目录
4.4.2配置Build
4.4.3列出配置选项
4.4.4修改配置选项
4.4.5构建调试配置
4.4.6使用CMake构建
4.4.7 . / configure仿真
4.4.8面向开发人员:如何编写平台检查
4.4.9 CMake代码故障处理
4.4.10开发人员CMake提示
4.4.11 mysql专用的CMake宏
4.4.12接口第三方工具
4.5 FAQ /杂项
4.5.1在源外编译中运行mysql-test-run.pl
4.5.2在Visual Studio或Xcode项目中运行mysql-test-run.pl
4.5.3使distclean
4.5.4针对不同硬件架构的编译
4.6自动工具到CMake转换指导
4.6.1命令调用格式
4.6.2安装布局选项
4.6.3存储引擎选项
4.6.4库选项
4.6.5杂项选项
4.6.6调试配置流程
4.6.7接口第三方工具
5插件
5.1 CMake变量控制插件构建(MySQL 5.5及更高版本)
5.2创建宏来定义插件
5.3自动工具配置支持(MySQL 5.1)
5.4 Autotools插件宏
在插件中指定mysqld变量
5.6插件的附加访问器
5.7 MySQL服务插件
5.7.1插件服务组件
5.7.2编写服务供插件内部使用
6服务器事务处理
6.1历史记录
6.2现状
6.3数据布局
6.4事务生命周期
6.5角色与职责
6.6关于DDL和正常事务的附加说明
7优化器
7.1代码和概念
安装7.1.1定义
7.1.2优化器代码
7.2主要优化
7.2.1优化常数关系
7.2.2优化连接
7.2.3互换
7.2.4 ORDER BY条款
7.2.5分组条件及相关条件
7.3其他优化
7.3.1空值过滤ref和eq_ref访问
7.3.2 Partitioning-Related优化
8跟踪优化器
8.1典型用法
8.2控制跟踪的系统变量
8.3 INFORMATION_SCHEMA OPTIMIZER_TRACE表
8.4可追溯查询
8.5自动跟踪清除
8.6调优跟踪清除
8.7跟踪内存使用情况
8.8权限检查
8.9与——debug选项的交互
8.10 optimizer_trace系统变量
8.11 end_markers_in_json系统变量
8.12选择要跟踪的优化器特性
8.13一般跟踪结构
8.14的例子
8.15显示跟踪信息
8.16防止使用优化器跟踪
8.17测试
8.18实现
9内存分配
9.1 MySQL服务器的内存分配(sql目录)
9.2库或存储引擎的内存分配
10重要的算法和结构
10.1项目类别
10.2 MySQL如何排序(filesort)
10.3批量插入
10.4 MySQL如何缓存
10.5 MySQL如何使用Join Buffer Cache
10.6 MySQL如何处理FLUSH TABLES
10.7全文搜索
10.8 FLOAT和DOUBLE数据类型表示
10.9日期和时间数据类型表示
10.10线程
10.11字符集和排序规则
10.12错误标志和函数
10.13 mysys Library中的函数
10.14位图
11个文件格式
11.1 MySQL .frm文件格式
MySQL如何执行不同的选择
12.1选择执行步骤
12.2 select_resultClass
12.3简单选择或主选择
12.4复杂选择的结构
12.5非子查询联合执行
12.6派生表执行
12.7子查询
12.8单个选择引擎
12.9联盟引擎
12.10特殊的引擎
12.11解释执行
MySQL如何转换子查询
13.1 Item_in_subselect:: select_transformer
13.1.1标量IN子查询
13.1.2行入子查询
13.2 Item_allany_subselect
13.3 Item_singlerow_subselect
14 MySQL客户端/服务器协议
14.1概述
14.1.1基本数据类型
14.1.2 MySQL包
14.1.3通用响应报文
14.1.4字符集
14.1.5连接的生命周期
14.1.6命令阶段
14.2连接阶段
14.2.1初始握手
14.2.2 Auth阶段快速路径
14.2.3认证方式不匹配
14.2.4 COM_CHANGE_USER命令后认证
14.2.5连接阶段报文
14.2.6功能标志
14.3认证方法
14.3.1局限性
14.3.2旧密码鉴权
14.3.3安全密码认证
14.3.4明文认证
14.3.5 Windows本地认证
14.3.6 SHA256
14.4压缩
14.4.1压缩包
14.4.2压缩报文头
14.4.3压缩载荷
14.4.4未压缩的载荷
14.5 SSL
14.6文本协议
14.6.1 COM_SLEEP
14.6.2 COM_QUIT
14.6.3 COM_INIT_DB
14.6.4 COM_QUERY
14.6.5 COM_FIELD_LIST
14.6.6 COM_CREATE_DB
14.6.7 COM_DROP_DB
14.6.8 COM_REFRESH
14.6.9 COM_SHUTDOWN
14.6.10 COM_STATISTICS
14.6.11 COM_PROCESS_INFO
14.6.12 COM_CONNECT
14.6.13 COM_PROCESS_KILL
14.6.14 COM_DEBUG
14.6.15 COM_PING
14.6.16 COM_TIME
14.6.17 COM_DELAYED_INSERT
14.6.18 COM_CHANGE_USER
14.6.19 COM_RESET_CONNECTION
14.6.20 COM_DAEMON
14.7准备好的语句
14.7.1二进制协议结果集
14.7.2二进制协议结果集行
14.7.3二进制协议值
14.7.4 COM_STMT_PREPARE
14.7.5 COM_STMT_SEND_LONG_DATA
14.7.6 COM_STMT_EXECUTE
14.7.7 COM_STMT_CLOSE
14.7.8 COM_STMT_RESET
14.8存储过程
14.8.1 Multi-Resultset
14.8.2 Multi-Statement
14.8.3 COM_SET_OPTION
14.8.4 COM_STMT_FETCH
14.9复制协议
14.9.1 Binlog文件
14.9.2 Binlog网络流
14.9.3 Binlog版本
14.9.4 Binlog事件
14.9.5 COM_BINLOG_DUMP
14.9.6 COM_BINLOG_DUMP_GTID
14.9.7 COM_TABLE_DUMP
14.9.8 COM_CONNECT_OUT
14.9.9 COM_REGISTER_SLAVE
14.10基于行的复制
14.10.1 TABLE_MAP_EVENT
14.10.2 ROWS_EVENT
14.10.3 ROWS_QUERY_EVENT
14.11 Semi-Synchronous复制
14.11.1 Binlog半同步事件
14.11.2半同步ACK报文
14.12协议的例子
14.12.1登录mysql客户端
14.12.2 ProtocolText::结果集
14.12.3认证方式开关
14.12.4 SHA256例子
14.13源代码位置
14.13.1 MySQL服务器
14.13.2二进制协议类型实现
15 X协议
15.1生命周期
15.2认证
15.3信息
15.4预期
15.5通知
15.6 X协议的X插件实现
15.7用例
15.8实现笔记
15.9与MySQL C/S协议比较
16存储程序
17预处理语句和存储例程的重新执行
17.1语句重新执行要求
17.2准备准备报表
17.3执行准备语句
17.4存储过程语句的执行
18编写程序
18.1扩展类过程
18.1.1构造函数
18.1.2 change_columns ()
18.1.3 send_row ()
18.1.4 add ()
18.1.5 end_group ()
18.1.6 end_of_records ()
18.2初始化的回调
18.3调用序列
18.4服务器代码补丁要求
19个复制
19.1组织章
19.2源代码文件
19.3原则
19.3.1 Binlog格式
19.3.2 Master和Slave的区别
19.3.3崩溃
19.3.4 Binlog文件和索引
19.4规则
19.4.1确定日志记录格式
19.4.2安全声明
19.4.3日志事务
19.4.4记录auto_increment列的更新
19.4.5记录变量和函数的访问
19.4.6其他不安全声明
19.4.7 binlog_row_image
19.4.8复制锁
20二进制日志
20.1二进制日志简介
20.2高级二进制日志结构和内容
20.3二进制日志相关的源文件
20.3.1来源文件考古笔记
20.4生成可浏览的二进制日志信息
20.5事件分类和类型
20.5.1事件类考古笔记
20.6事件的含义
20.7事件结构
20.7.1事件内容编写约定
20.7.2事件报头字段
20.7.3事件数据字段(事件相关信息)
20.8二进制日志版本
20.8.1判断二进制日志版本
20.8.2保证二进制日志未来版本的兼容性
20.9指定事件类型的事件数据
20.9.1 LOAD DATA INFILE事件
20.10基于行的二进制日志
20.11额外的资源
21 MyISAM存储引擎
21.1 MyISAM记录结构
21.1.1介绍
21.1.2列的物理属性
21.1.3从哪里获取更多信息
21.2 .MYI文件
21.2.1 MyISAM文件
21.3 MyISAM动态数据文件布局
21.3.1记录存储框布局图(记录部件、记录块)
21.3.2记录内容
21.3.3打包录音布局
21.3.4内存中记录布局
21.4 MyISAM压缩数据文件布局
21.4.1霍夫曼压缩
21.4.2 myisampack程序
21.4.3记录和Blob长度编码
21.4.4代码树表示
21.4.5索引文件使用情况
21.4.6 myisampackTricks
21.4.7解码详细说明
21.5 MyISAM键缓存
21.5.1 MyISAM并发插入
22 InnoDB存储引擎
22.1 InnoDB记录结构
22.1.1高空照片
22.1.2从哪里查找更多信息
22.2 InnoDB页面结构
22.2.1高空视图
22.2.2例子
22.2.3从哪里获取更多信息
22.3 InnoDB互斥锁和读写锁的实现
23编写自定义存储引擎
23.1额外的资源
23.2概述
23.3创建存储引擎源文件
23.4添加引擎相关变量和参数
23.5创建句柄
23.6处理处理器实例化
23.7定义文件扩展名
23.8创建表
23.9打开表
23.10执行基本表扫描
23.10.1实现store_lock()方法
23.10.2实现external_lock()方法
23.10.3实现rnd_init()方法
23.10.4实现info(uinf flag)方法
23.10.5实现extra()方法
23.10.6实现rnd_next()方法
23.11关闭表
23.12增加存储引擎对INSERT的支持
23.13添加对存储引擎的UPDATE支持
23.14添加存储引擎支持DELETE功能
23.15支持非顺序读
23.15.1实现position()方法
23.15.2实现rnd_pos()方法
23.16支持索引
23.16.1索引概述
23.16.2在CREATE TABLE操作中获取索引信息
23.16.3创建索引键
23.16.4解析关键信息
23.16.5向优化器提供索引信息
23.16.6使用index_init()为使用索引做准备
23.16.7使用index_end()进行清理
23.16.8实现index_read()方法
23.16.9实现index_read_idx()方法
23.16.10实现index_read_last()方法
23.16.11实现index_next()方法
23.16.12实现index_prev()方法
23.16.13实现index_first()方法
23.16.14实现index_last()方法
23.17支持事务
23.17.1交易概述
23.17.2启动事务
23.17.3执行回滚
23.17.4实现承诺
23.17.5添加保存点支持
23.18 API参考
23.18.1 bas_ext
23.18.2密切
23.18.3创建
23.18.4 delete_row
23.18.5 delete_table
23.18.6 external_lock
23.18.7额外
23.18.8 index_end
23.18.9 index_first
23.18.10 index_init
23.18.11 index_last
23.18.12 index_next
23.18.13 index_prev
23.18.14 index_read
23.18.15 index_read_idx
23.18.16 index_read_last
23.18.17信息
23.18.18开放
23.18.19位置
23.18.20 records_in_range
23.18.21 rnd_init
23.18.22 rnd_next
23.18.23 rnd_pos
23.18.24 start_stmt
23.18.25 store_lock
23.18.26 update_row
23.18.27 write_row
23.19常见问题解答
24测试同步
24.1睡觉
24.2等条件
24.3 Dbug睡眠
24.4错误注入
24.5用户级锁
24.6调试同步工具
24.6.1 DEBUG_SYNC值的形式化语法
24.6.2调试同步激活/去激活
24.6.3同步调试实现
24.6.4典型的同步模式
24.6.5与DBUG基金合作
24.6.6调试同步进一步读取
24.7调试同步点(过时)
24.7.1备份断点
25注射测试故障
25.1测试故障宏
25.2测试故障宏使用情况
26如何创建好的测试用例
26.1正式的东西
26.1.1编码风格
26.1.2 SQL语句示例
26.1.3请避免代码过于密集
26.1.4脚本头
26.1.5标题的例子
26.1.6框内注释
26.2评论无处不在
26.2.1复杂的测试架构或棘手的代码
26.2.2子测试用例能够揭示Bug
26.2.3单项成绩
26.2.4让测试协议更容易理解
26.2.5改进协议示例
26.3正式场合之外的一些规则
26.3.1错误掩蔽
26.3.2使用选项——disable_abort_on_error
26.3.3测试结束后的完美清理
26.3.4操作系统相关命令的使用
26.4 -测试
26.5测试多个变体
26.5.1存储引擎变化
26.5.2协议选项的变更
26.6其他技巧
26.6.1随机定时问题的稳定性检查
26.6.2主机名相关问题的稳定性检查
26.6.3稳定性检查,发现意外问题
26.6.4结果集内的行顺序
26.6.5测试用例的行为应该依赖于SHOW的结果
26.6.6测试执行挂起
26.6.7如果测试比较复杂,支持调试
26.6.8你需要知道一些语法,一个选项等,但讨厌阅读手册
26.7 MTR2注意事项
26.8可疑测试和脚本示例
26.8.1测试的重点可能与代码序列不匹配
26.8.2过于贪婪的测试
26.8.3关于附加会话的风险处理
27个错误消息
27.1在MySQL中添加新的错误信息
27.1.1在多个MySQL版本中添加错误信息
27.1.2在MySQL 5.0.3及以上版本添加错误消息
27.1.3为旧版本(< MySQL 5.0)添加错误消息
27.2标记错误信息过时
27.3添加存储引擎错误信息
一个MySQL源码分发版
背书的目录清单
A.1.1 BUILD目录
A.1.2客户端目录
A.1.3 config目录
A.1.4 cmd-line-utils目录
A.1.5 dbug目录
A.1.6文档目录
A.1.7多余目录
A.1.8堆目录
A.1.9 include目录
A.1.10 innobase目录
A.1.11 libmysql目录
A.1.12 libmysql_r目录
A.1.13 libmysqld目录
A.1.14 man目录
A.1.15 myisam目录
A.1.16 myisammrg目录
A.1.17 mysql-test目录
A.1.18 mysys目录
A.1.19查看ndb目录
A.1.20查看netware目录
A.1.21 NEW-RPMS目录
A.1.22 os2目录
A.1.23 pstack目录
A.1.24 regex目录
A.1.25查看SCCS目录
A.1.26 scripts目录
A.1.27“server-tools”目录
A.1.28 sql目录
A.1.29 sql-bench目录
A.1.30 sql-common目录
A.1.31 SSL目录
A.1.32字符串目录
A.1.33 support-files目录
A.1.34 tests Directory
A.1.35 tools目录
A.1.36 vc++文件目录
A.1.37配置vio目录
A.1.38 zlib目录
B InnoDB源码分发
指数