文档介绍:主要模块及数据流
经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改。本文将对MySQL的整体架构及重要目录进行讲述。
源码结构(MySQL--m2)
BUILD: 内含在各个平台、各种编译器下进行编译的脚本。如compile-pentium-debug表示在pentium架构上进行编译的脚本。
Client: 客户端工具,如mysql, mysqladmin之类。
Cmd-line-utils: readline, libedit工具。
Config: 给aclocal使用的配置文件。
Dbug: 提供一些调试用的宏定义。
Extra: 提供innochecksum,resolveip等额外的小工具。
Include: 包含的头文件
Libmysql: 库文件,。
Libmysql_r: 线程安全的库文件,。
Libservices: ,实现了打印功能。
Man: 手册页。
Mysql-test: mysqld的测试工具一套。
Mysys: 为跨平台计,MySQL自己实现了一套常用的数据结构和算法,如string, hash等。
Netware: 在netware平台上进行编译时需要的工具和库。
Plugin: mysql以插件形式实现的部分功能。
Pstack: 异步栈追踪工具。
Regex: 正则表达式工具。
Scripts: 提供脚本工具,如mysql_install_db等
Sql: mysql主要代码,将会生成mysqld文件。
Sql-bench: 一些评测代码。
mon: 存放部分服务器端和客户端都会用到的代码。
Storage: 存储引擎所在目录,如myisam, innodb, ndb等。
Strings: string库。
Support-files: f示例配置文件。
Tests: 测试文件所在目录。
Unittest: 单元测试。
Vio: virtual io系统,work io的封装。
Win: 给windows平台提供的编译环境。
Zip: zip库工具
二主要数据结构
THD 线程描述符(sql/)
包含处理用户请求时需要的相关数据,每个连接会有一个线程来处理,在一些高层函数中,此数据结构常被当作第一个参数传递。
; // 客户连接描述符
Protocol *protocol; // 当前的协议
Protocol_text protocol_text; // 普通协议
Protocol_binary protocol_binary; // 二进制协议
HASH user_vars; //用户变量的hash值
String packet; // 网络IO时所用的缓存
String convert_buffer; // 字符集转换所用的缓存
struct sockaddr_in remote; //客户端socket地址
THR_LOCK_INFO lock_info; // 当前线程的锁信息
THR_LOCK_OWNER main_lock_id; // 在旧版的查询中使用
THR_L