MySQL 是一个开源的关系型数据库。 本文以 8.0.40 版本为例,记录 MySQL Server 的构建、安装、运行与调试。

环境变量

为了便于描述,本文的操作都会在一个工作路径中执行。 所以直接给这个路径配一个环境变量 MYSQL_WORKSPACE

export MYSQL_WORKSPACE=${HOME}/mysql

为了方便,再配置一些其他环境变量:

# 安装路径
export MYSQL_INSTALL=${MYSQL_WORKSPACE}/install
export PATH=${MYSQL_INSTALL}/bin:${PATH}

# 数据目录
export MYSQL_DATA=${MYSQL_WORKSPACE}/data

构建并安装 MySQL Server

先去 GitHub 上找到 MySQL Server 8.0.40 版本的 tag:

https://github.com/mysql/mysql-server/releases/tag/mysql-8.0.40

然后下载代码、解压:

cd ${MYSQL_WORKSPACE}
wget https://github.com/mysql/mysql-server/archive/refs/tags/mysql-8.0.40.tar.gz
tar -zxf mysql-8.0.40.tar.gz

解压之后 MySQL Server 的项目应该会在 ${MYSQL_WORKSPACE}/mysql-server-mysql-8.0.40 目录里面。 于是直接进去用 CMake 配置项目并生成构建脚本。

cd ${MYSQL_WORKSPACE}/mysql-server-mysql-8.0.40

mkdir -p build && cd build
cmake .. \
  -DCMAKE_INSTALL_PREFIX=${MYSQL_INSTALL} \
  -DMYSQL_DATADIR=${MYSQL_DATA} \
  -DWITH_DEBUG=ON \
  -DDOWNLOAD_BOOST=ON \
  -DWITH_BOOST=${MYSQL_WORKSPACE}/boost

这个命令通过 -D 参数指定了一些 CMake 变量:

  • CMAKE_INSTALL_PREFIX:安装路径。
  • DMYSQL_DATADIR:MySQL 数据目录,可以通过 SELECT @@datadir; 查询。
  • WITH_DEBUG:调试支持。
  • DOWNLOAD_BOOST:下载 Boost 库
  • WITH_BOOST:用于存放 Boost 库的路径

如果 Boost 库下载失败,错误日志里会提示下载路径,可以尝试手动下载并解压:

cd ${MYSQL_WORKSPACE}
mkdir -p boost && cd boost
wget https://archives.boost.io/release/1.77.0/source/boost_1_77_0.tar.bz2
tar -jxf boost_1_77_0.tar.bz2

弄好之后重新回去执行上面的 cmake 命令即可

CMake 在执行过程中可能会报一些依赖库缺失的错误,按照提示手动安装即可。 这里记录一下我的安装过程(发行版是 openEuler 22.03 LTS SP4):

dnf install openssl-devel
dnf install libtirpc-devel
dnf install rpcgen

最后用 make 构建即可:

cd ${MYSQL_WORKSPACE}/mysql-server-mysql-8.0.40/build
make -sj8 && make install

可以检查一下安装是否正常:

mysqld --version

初始化数据库

mysqld --initialize-insecure

如果之前的 cmake 命令执行正确,数据库目录会被初始化在 ${MYSQL_DATA} 中。

运行数据库

mysqld &

连接数据库

mysql -u root --skip-password

可以尝试输出一下版本号:

mysql> select version();
+--------------+
| version()    |
+--------------+
| 8.0.40-debug |
+--------------+
1 row in set (0.00 sec)

调试

使用 VS Code 调试,需要安装 C/C++ 插件。 可以直接 attach 到 mysqld 进程中。 如果前面环境变量配置正确,可以直接使用这个 launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Attach",
            "type": "cppdbg",
            "request": "attach",
            "program": "${env:MYSQL_INSTALL}/bin/mysqld",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}