mysql核心内幕第三章-mysql关键目录

主要关键目录

MySQL最主要的几个目录,按字母顺序:

  • BUILD
  • client
  • storage
  • mysys
  • sql
  • vio

BUILD目录

BUILD:编译和安装脚本目录。该目录中文件数量较少,绝大部分都是以compile-开头。compile文件时用来对MySQL源代码进行各种编译的脚本文件。
例如compile-pentium-debug文件:

#1 /bin/sh

path='dirname $0'
set -- "$@" --with-debug=full
. *$path/SETUP.sh*
extra_flags="$pentium_cflags $debug_cflags"
extra_configs="$pentium_configs $debug_configs"
. *$path/FINISH.sh*
该脚本调用了同目录下的SETUP.sh和FINISH.sh脚本,并添加了$debug_cflags和$debug_configs两个debug编译选项。SETUP.sh脚本为C和C++编译器设置了优化选项。
compile-pentium-debug文件执行顺利的话,最后读者在目标目录中能够得到MySQL服务器的二进制可执行文件(Binary File)。

client目录

该目录下包含的文件:

client_priv.h                   CMakeLists.txt
completion_hash.cc              conmletion_hash.h
echo.c                          get_password.c
Makefile.am                     Makefile.in
my_readline.h                   mysqladmin.cc
musqlbinlog,cc                  my_user.c
mysql.cc                        mysqlcheck.cc
mysqldump.cc                    mysqlimport.c
mysqlshow.c                     mysqlslap.c
mysqltest.cc                    mysql_upgrade.c
readline.cc                     sql_string.cc
sql_string.h

storage目录

MySQL和各类存储引擎代码在storage这个大目录中:

drwxr-xr-x          archive
drwxr-xr-x          blackhole
drwxr-xr-x          csv
drwxr-xr-x          example
drwxr-xr-x          fedarated
drwxr-xr-x          heap
drwxr-xr-x          ibmdb2i
drwxr-xr-x          innobase
drwxr-xr-x          myisam
drwxr-xr-x          myisammrg
drwxr-xr-x          ndb

举例:以MyISAM为例,myisam和myisammrg目录包含了该存储引擎的代码,myisammrg目录文件为merge表提供支持,myisam是MyISAM存储引擎的主要目录。该目录下可以找到MyISAM处理IO等操作的源代码:

mi_rsame.c    
mi_rsamepos.c
mi_scan.c
mi_search.c
mi_static.c
mi_statrec.c
mi_test1.c
mi_test2.c
mi_test3.c
mi_test_all.res
mi_test_all.sh
mi_unique.c
mi_update.c
mi_write.c
可以看出MyISAM的源文件大部分都是以mi开头,

mysys目录

MySQL system library的简写,是MySQL的库函数文件,一种可执行的二进制形式,可以被操作系统载入内存中执行。在mysys目录中有125个.c文件,这些库函数还将不断扩大。库文件编译后在Windows上是.lib和.dll文件,在Linux和Unix上是.so和.a文件。
mysys目录包含各种各样的功能库文件,包括文件打开、数据读写、内存分配、OS/2系统特别优化、线程控制、权限控制、Raid Table、动态字符串处理、队列算法、网络传输协议、初始化函数、错误处理、平衡二叉树算法、符号连接处理、唯一临时文件名生成、hash函数、排序算法、压缩传输协议等。

sql目录

这个目录是MySQL源代码中需要经常变化的目录之一,大部分已有bug也来自于该目录中的文件。主要包括mysqld.cc这一MySQL.main函数所在文件、各类SQL语句的解析/实现。
这里有我们熟知的两个模块:
sql_lex.cc     词法解析模块
sql_yacc       语法解析模块

各种SQL语句的执行代码也可以在sql目录中找到:
sql_delete.cc     delete语句
sql_do.cc         操作语句
sql_help.cc       help帮助语句
sql_insert.cc     插入语句
sql_select.cc     select语句
sql_show.cc       show语句 

vio目录

VIO意指Virtual I/O,主要用来处理各种网络协议的IO。Vitual I/O使得各模块的网络协议能够无缝地调用I/O功能。MySQL网络子系统将调用这里的方法。

执行流

client  用户输入SELECT语句
vio     信息通过TCP/IP网络传入
sql     服务器解析SQL语句:Lex和YACC将SQL语句解析并生成语法树,该语法树最终由底层sql目录中sql_select.cc执行
storage MySQL调用存储引擎:独立的handler.cc接收到最后的请求并执行这个语句
mysys   引擎文件调用库文件从物理文件中读取内容:Handler依靠storage目录下的具体存储引擎代码和函数读取数据

你可能感兴趣的:(mysql)