< MySQL Innternals Manual >阅读笔记

2020/06/29 posted in  Tech
Tags: 

Chapter 1 A Guided Tour Of The MySQL Source Code

这一章主要是讲MySQL源码的各个目录和其作用

1.1 Getting the Source Tree

  1. 从GitHub克隆MySQL源码

    me@mymachine:~$ git clone https://github.com/mysql/mysql-server.git 
    # 在国内可以使用镜像, 速度会快一点
    git clone https://github.com.cnpmjs.org/mysql/mysql-server.git
  2. 在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
  3. 使用git branch -r查看“remote-tracking”分支

    ~/mysql-server$ git branch -r
    origin/5.5
    origin/5.6
    origin/5.7
    origin/HEAD -> origin/5.7
  4. 使用git branch查看当前分支

    ~/mysql-server$ git branch
    * 5.7
    
  5. 使用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'
  6. 再次使用git branch查看当前的所有分支, 可以看到, 一共有3个分支, 5.5是当前分支

    ~/mysql-server$ git branch
    * 5.5
    5.6
    5.7

1.2 The Major Directories

这一章介绍7个主要的目录

1.2.1 Major Directories: BUILD

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
1.2.1.1 GNU Debugger

推荐通过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
1.2.1.2 Running a Test with the Debugger

通过嵌入模式(embedded mode)运行一个名为some.test的测试:

  1. 运行libmysqld/examples/test_run --gdb some.test命令来创建一个libmysqld/examples/test-gdbinit文件, 这个文件包含了mysqltest所需的参数
  2. 因为在test-run --gdb命令执行完成之后, test-gdbinit文件就会被移除, 所以我们要在那之前将test-gdbtest文件先拷贝一个备份(比如叫做some-gdbtest)
  3. 选一个调试器(debugger)加载libmysqld/examples/mysqltest_embedded, 比如gdb mysqltest_embedded
  4. 在debugger里面执行--sou some-gdbtest

如果只是想调试嵌入式服务的一些查询, 而不是测试脚本, 那么只需要运行libmysqld/examples/mysql就可以了. 他是mysql常用工具的克隆, 是基于服务器内嵌的. 能在gdb和其他debugger下良好工作.

1.2.2 Major Directories: client

这里面主要都是些客户端程序的源码

1.2.3 Major Directories: myisam

在最新的MySQL8.0里面, MyISAM存储引擎已经不再使用了, MySQL的引擎源码存储在storage目录底下