MySQL内部手册

抽象的

这是MySQL内部手册。

有关法律信息,请参阅法律声明

有关使用MySQL的帮助,请访问MySQL论坛,您可以在其中讨论其他MySQL用户的问题。

文档生成日期:2021-04-01(修订日期:572)

目录

前言和法律声明
1 . MySQL的源代码指南
1.1获取源树
1.2主要目录
1.2.1主要目录:构建
1.2.2主要目录:客户
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如何扩展本页
4使用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创建构建目录
4.4.2配置构建
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常见问题/混杂
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及更高版本)
用CMake宏定义插件
5.3自动工具配置支持(MySQL 5.1)
5.4 AutoTools插件宏
5.5在插件中指定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.2主要优化
7.2.1优化常量关系
7.2.2优化连接
7.2.3互换
7.2.4条款订购
7.2.5集团及相关条件
7.3其他优化
7.3.1对ref和eq_ref访问的空过滤
7.3.2与分区相关的优化
8跟踪优化器
8.1典型用法
8.2控制跟踪的系统变量
8.3 INFORMATION_SCHEMA OPTIMIZER_TRACE表
8.4可追溯查询
8.5自动跟踪清除
8.6跟踪清洗调优
8.7跟踪内存使用情况
8.8权限检查
与——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 Server(SQL目录)中的内存分配
9.2库或存储引擎中的内存分配
10个重要算法和结构
10.1项目类别
10.2 MySQL如何排序(filesort)
10.3散装刀片
10.4 MySQL如何进行缓存
10.5 MySQL如何使用Join Buffer缓存
10.6 MySQL如何处理FLUSH表
10.7全文搜索
10.8浮点数和双数据类型表示
10.9日期和时间数据类型表示
10.10线程
10.11字符集和排列
10.12错误标志和函数
10.13 mysys库中的函数
10.14位数
11个文件格式
11.1 MySQL .FRM文件格式
MySQL如何执行不同的选择
12.1选择执行步骤
12.2 select_resultclass.
12.3 SIMPLE or PRIMARY SELECT
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子查询中的标量
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 Network Stream
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 Auth方法开关
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主从的区别
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加载数据文件事件
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存储引擎
InnoDB记录结构
22.1.1高空照片
22.1.2在哪里可以找到更多的信息
22.2 InnoDB页面结构
22.2.1高空视图
22.2.2示例
22.2.3到哪里去查找更多的信息
22.3 InnoDB互斥和读/写锁实现
编写自定义存储引擎
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实现外部_LOCK()方法
23.10.3实现rnd_init()方法
23.10.4实施信息(UINF标志)方法
23.10.5实施额外()方法
23.10.6实现rnd_next()方法
23.11关闭桌面
23.12添加存储引擎对插入硬盘的支持
23.13添加对存储引擎升级的支持
23.14添加存储引擎支持删除操作
23.15支持非顺序读数
23.15.1实现position()方法
23.15.2实现rnd_pos()方法
23.16支持索引
23.16.1索引概述
23.16.2在创建表操作期间获取索引信息
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.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复杂的测试架构或棘手的代码
一个子测试用例能够显示一个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使用OS特定的命令
26.4 -测试
使用几种变体进行测试
26.5.1存储引擎的变化
26.5.2协议选项的变体
26.6杂项提示
26.6.1稳定性检查随机定时问题
26.6.2主机名相关问题稳定性检查
26.6.3稳定性检查意外问题
26.6.4结果集中的行顺序
测试用例的行为应该依赖于显示的结果
26.6.6测试执行是否挂起?
26.6.7如果您的测试比较复杂,请支持调试
你需要知道一些语法,一个选项等等,但是你讨厌读手册
26.7地铁2号线的注意事项
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目录列表
A.1.1构建目录
A.1.2客户端目录
A.1.3配置目录
A.1.4 cmd-line-utils目录
A.1.5 dbug目录
A.1.6 Docs目录
A.1.7额外的目录
A.1.8堆目录
A.1.9包含目录
A.1.10 innobase目录
A.1.11 libmysql目录
a.1.12 libmysql_r目录
A.1.13 libmysqld目录
A.1.14男人目录
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新RPMS目录
A.1.22 os2目录
A.1.23 pstack目录
A.1.24 Regex目录
A.1.25 SCCS目录
A.1.26脚本目录
A.1.27服务器 - 工具目录
A.1.28 sql目录
A.1.29 SQL-Bench目录
A.1.30 sql-common目录
A.1.31 SSL目录
A.1.32字符串目录
A.1.33支持文件目录
A.1.34测试目录
A.1.35 tools目录
A.1.36 vc++ Files目录
A.1.37 vio目录
a.1.38 zlib目录
B INNODB源代码分发
指数