< MySQL Innternals Manual >阅读笔记
2020/06/29
posted in
Tech
2020/06/29
posted in
Tech
这一章主要是讲MySQL源码的各个目录和其作用
从GitHub克隆MySQL源码
me@mymachine:~$ git clone https://github.com/mysql/mysql-server.git
# 在国内可以使用镜像, 速度会快一点
git clone https://github.com.cnpmjs.org/mysql/mysql-server.git
在mysql-server的目录中可以查看源码的目录结构
me@mymachine:~$ cd mysql-server
me@mymachine:~/mysql-server$ ls
BUILD COPYING libmysqld regex tests
BUILD-CMAKE dbug libservices scripts unittest
client Docs man sql VERSION
cmake extra mysql-test sql-bench vio
CMakeLists.txt include mysys sql-common win
cmd-line-utils INSTALL-SOURCE packaging storage zlib
config.h.cmake INSTALL-WIN-SOURCE plugin strings
configure.cmake libmysql README support-files
使用git branch -r
查看“remote-tracking”分支
~/mysql-server$ git branch -r
origin/5.5
origin/5.6
origin/5.7
origin/HEAD -> origin/5.7
使用git branch
查看当前分支
~/mysql-server$ git branch
* 5.7
使用git checkout
迁出指定分支
~/mysql-server$ git checkout 5.6
Branch 5.6 set up to track remote branch 5.6 from origin.
Switched to a new branch '5.6'
me@mymachine:~/mysql-server$ git checkout 5.5
Branch 5.5 set up to track remote branch 5.5 from origin.
Switched to a new branch '5.5'
再次使用git branch
查看当前的所有分支, 可以看到, 一共有3个分支, 5.5是当前分支
~/mysql-server$ git branch
* 5.5
5.6
5.7
这一章介绍7个主要的目录
BUILD
目录负责编译和连接
shell> ./BUILD/compile-pentium-debug --prefix=$HOME/mysql-bin
compile-pentium-debug
其实就是一个简单的shell脚本, 在8.0里面已经没有BUILD文件夹了# compile-pentium-debug 脚本 path=`dirname $0` cmake $path/.. -DWITH_DEBUG=1 make
这个命令会调用一个批处理文件生成MySQL的服务端和客户端的可执行程序
如果缺少相应的依赖包, 会执行失败
编译完后, 使用以下命令安装
shell> make
shell> make install
shell> $HOME/mysql-bin/scripts/mysql_install_db \
--basedir=$HOME/mysql-bin \
--datadir=$HOME/mysql-bin/var
推荐通过gdb(GNU debugger)调试运行中的程序
也可以使用图形化的调试工具DDD(Data Display Debugger)
使用以下命令调试mysqld服务
shell> ddd --gdb --args \
$HOME/mysql-bin/libexec/mysqld \
--basedir=$HOME/mysql-bin \
--datadir=$HOME/mysql-bin/var\
--skip-networking
通过嵌入模式(embedded mode)
运行一个名为some.test
的测试:
libmysqld/examples/test_run --gdb some.test
命令来创建一个libmysqld/examples/test-gdbinit
文件, 这个文件包含了mysqltest
所需的参数test-run --gdb
命令执行完成之后, test-gdbinit
文件就会被移除, 所以我们要在那之前将test-gdbtest
文件先拷贝一个备份(比如叫做some-gdbtest
)libmysqld/examples/mysqltest_embedded
, 比如gdb mysqltest_embedded
--sou some-gdbtest
如果只是想调试嵌入式服务的一些查询, 而不是测试脚本, 那么只需要运行libmysqld/examples/mysql
就可以了. 他是mysql常用工具的克隆, 是基于服务器内嵌的. 能在gdb
和其他debugger下良好工作.
这里面主要都是些客户端程序的源码
在最新的MySQL8.0
里面, MyISAM
存储引擎已经不再使用了, MySQL
的引擎源码存储在storage
目录底下