获取代码,构建,测试

MariaDB 服务器托管在 GitHub 上。官方仓库位于 https://github.com/MariaDB/server

前提条件

为了让调试过程更轻松,请确保您的硬件至少有 2GB 内存、10GB 硬盘和至少 4 个核心。我们将使用 gitcmake,因此您需要安装 git 和 cmake

拥有一个 GitHub 账号将使贡献过程更容易。

获取源代码并决定目标分支

建议您进行开发工作时使用普通用户身份,而不是超级用户身份。

  • 如果您正在开发新功能或重构代码,请使用 main 分支。
  • 如果您正在修复错误,包括任何构建或功能故障,请使用出现该错误的、受维护的最早分支。如果此错误来自我们的 Jira 错误跟踪器,则适用 Jira 中受维护的最早 Fix Version/s。截至 2025 年 1 月,受维护的最早分支是 10.5(于 2025 年 6 月终止维护)。
  • 如果即将发布的版本是该系列的最终版本,为了避免修复引入永久性回归,仅将关键且安全的错误修复应用于该版本。10.5 系列的最终版本计划于 2025 年第二季度发布。如有疑问,请在 Zulip 上咨询开发人员。

获取源代码的推荐方式是分叉并克隆它。对于非默认分支,可以附加一个 --branch {version} 参数。

git clone https://github.com/YOUR-USERNAME/server

构建服务器

在构建服务器之前,您必须安装构建依赖项。Windows 用户应遵循链接 如何在 Windows 上构建 MariaDB

在基于 Debian 的发行版上

apt-get build-dep mariadb-server
apt-get install build-essential libncurses5-dev gnutls-dev bison zlib1g-dev ccache

在基于 RPM 的发行版上

dnf builddep mariadb

可能需要一些额外的软件包来构建其他组件。如果您使用的操作系统版本自依赖项添加后有更新,也可能需要额外的软件包。

请注意,在某些 MacOS 系统上,默认的 bison 版本比我们构建 MariaDB 所需的版本稍旧。如果在构建过程中遇到语法错误,请尝试通过 Homebrew 安装 bison

配置构建

MariaDB 使用 cmake 生成用于编译服务器的 Makefiles(或 Ninja 构建文件)。

要检查是否安装了 cmake,请运行 cmake --version。CMake 有一个 CMAKE_BUILD_TYPE 选项,用于预定义的构建类型,这会影响优化以及构建结果是否可以被插桩。其中一种构建类型是 Debug 类型,对于此类型,优化是关闭的,并且会生成调试插桩。此选项用于创建跟踪文件,如果 mariadbd 崩溃,这些文件非常有用。未指定 CMAKE_BUILD_TYPE 运行时,使用默认值(RelWithDebugInfo)。 所有 MariaDB 的 CMake 配置选项都可以通过以下命令显示:

cmake . -LH

其中 L 代表简称,LH 代表简称加描述,LA 列出内部和高级选项。有关更多选项,请参阅 cmake 文档

我们始终建议进行树外构建,这样您的源代码就不会与构建生成的工件混在一起。这还允许从同一个源代码使用不同的 cmake 选项创建不同的构建目录。

如果您意外地进行了树内构建,请在重新配置和重新构建之前确保清除旧的对象文件和缓存信息。

make clean

rm CMakeCache.txt

或(推荐)这将删除所有未提交的更改。

git clean -dffx

git reset --hard HEAD

git submodule update --init --recursive

需要最后一个命令,因为新的 git clone 不会自动克隆所有内容(例如模块 libmariadb 和 storage/rocksdb/rocksdb 文件夹,它们是上游子模块)。在 git submodule update 之后,再次运行 git status。要配置一个调试构建(对开发有用),请在源代码树旁边创建一个构建目录并切换到该目录:

mkdir build-mariadb-server-debug
cd build-mariadb-server-debug

然后通过运行以下命令配置 MariaDB:

cmake ../server -DCMAKE_BUILD_TYPE=Debug

调试构建提供了额外的测试。

CMake 现在将检查哪些库可用、安装了哪些编译器,如果一切检查无误,它将以“配置成功”的消息结束。如果出现故障,请检查您需要安装哪些库。您可能需要安装它们的开发版本。

使用 CMake 配置会在 CMakeFiles 目录下生成文件:
CMakeFiles/CMakeError.logCMakeFiles/CMakeOutput.log.

初次配置完成后,您可以向 cmake 添加更多选项。选项会保存在 CMake 缓存中(构建目录 (build-mariadb-server-debug) 中的 CMakeCache.txt 文件)。


如果配置或构建不成功,您可以安装所需的软件包并重新运行 cmake。或者,如果错误仅限于某个插件,您可以使用类似于 -DPLUGIN_MROONGA=NO 的 cmake 选项禁用它。

构建时默认不包含嵌入式服务器,因为它会增加编译时间。要使用它,请使用 cmake . -DWITH_EMBEDDED_SERVER=1 编译服务器。请注意,这里的 . 是当前构建目录,而不是源目录。

作为替代方案,您也可以使用 ninja 构建系统来加快构建速度。为此,请确保您已安装 ninja

apt-get install ninja-build

如果您已成功安装构建系统,运行 ninja --version 将会得到安装的版本。

确保您已清除旧的对象文件,然后再次运行 cmake,但这次带上 Ninja 标志和前缀 -G

cmake ../server -DCMAKE_BUILD_TYPE=Debug -G Ninja

现在您可以编译服务器了(使用 make 或 ninja),在构建目录中调用 cmake --build .

为了加快构建速度,您可以排除开发中不需要的存储引擎。这里是一个示例,排除了一些存储引擎(使用 shell 扩展)以及其他用于加快构建速度的配置选项:

cmake ../server -DCONC_WITH_{UNITTEST,SSL}=OFF -DWITH_UNIT_TESTS=OFF -DCMAKE_BUILD_TYPE=Debug -DWITHOUT_DYNAMIC_PLUGIN=ON -DWITH_SAFEMALLOC=OFF -DWITH_SSL=bundled -DMYSQL_MAINTAINER_MODE=OFF -G Ninja

要查看 cmake 使用的全部选项或通过 GUI 更改它们,请在构建文件夹中运行 ccmake .(您需要安装 cmake-curses-gui)。

编译

使用 cmake 构建,无论使用 make 还是 ninja

 cmake --build . --parallel 5

将 5 替换为您可用于加快构建的核心数量。选项 --parallel 适用于 cmake 3.20+ 版本,或者可以像 cmake --build . -- -j5 这样将选项传递给原生工具。Ninja 会自动并行构建。

测试服务器

服务器构建完成后,我们应该测试一切是否正常工作。

要查看您的 mariadbd 二进制文件是否支持调试,请在构建目录中,于命令行运行 sql/mariadbd -V。如果版本号以 -debug 结尾,则您的 mariadbd 二进制文件是使用调试支持编译的。

MariaDB 在 mysql-test 文件夹中定义了一个测试框架。要运行所有测试:

mysql-test/mtr --parallel=5 --mem --force --max-test-fail=40

注意:如果您使用 MacOS,请省略 --mem 标志。要仅运行 unit 测试:

mysql-test/mtr --suite=unit --mem --parallel=5

以上每个命令都在构建目录中运行。mysql-test-run 使用自己的 --defaults-file,覆盖任何默认文件。

您可以在以下位置查看测试日志:

mysql-test/var/log

mtr 有许多有用的标志。

  • --parallel=#number-of-parallel-tasks 将并行运行多个测试,从而加快测试速度。即使使用并行化,该过程也可能轻易花费一个多小时。
  • --mem 用于强制测试在虚拟内存盘上运行。只要内存充足,这将加快速度(在 MacOS 中不起作用)。
  • --force 用于在失败后继续运行测试套件。
  • --max-test-fail 用于限制在中止当前测试运行之前允许的测试失败次数。默认为 10。可以通过环境变量 MTR_MAX_TEST_FAIL 设置其默认值。(需要 --force
  • --embedded 用于使用嵌入式服务器运行。
  • --big-test(或简写为 --big)用于运行大型测试(可能占用大量内存和/或磁盘的测试。在测试中,这些测试包含 --source include/big_test.inc。如果您只想运行大型测试,请使用该标志两次 --big --big
  • --help 用于显示控制运行哪个引擎/变体的选项。

构建后启动 mariadbd

您可以直接从构建目录运行 mariadbd(无需执行 sudo cmake --install .)。

如果您是第一次运行 MariaDB,则需要运行 mariadb-install-db 以安装所需的系统表。但在此之前,请为您创建数据的目录(此目录将用作配置文件中的 datadir 系统变量)。将以下内容复制到 ~/mariadb.cnf 文件中。

注意:如果您使用 MacOS,在本文档中所有后续步骤中,您需要使用您的主目录路径而不是 ~

这些位置的路径必须存在且当前操作系统用户可写入。

[client-server]
socket = /path/to/mariadb.sock

[mariadb]
datadir = path/to/your/data/dir

如果您需要更改某些内容,请阅读更多关于设置 mariadbd 配置文件和组 的信息。

现在您已创建了自己的配置文件,在安装系统表时可以使用 --defaults-file 标志调用它。要安装系统表,请在构建文件夹中调用以下命令:

./scripts/mariadb-install-db --srcdir=../server --defaults-file=~/mariadb.cnf

之后,您可以启动 mariadbd,它默认查找选项文件。如果提供了 --defaults-filemariadbd 将仅从此文件中读取。运行如下:

sql/mariadbd --defaults-file=~/mariadb.cnf

启动 mariadbd 后,您可以以 root 用户身份启动客户端:

client/mariadb

接下来是什么?

如果您完成了功能/错误修复,请参阅提交拉取请求 将您的更改贡献给下一个服务器版本。

作为新贡献者,我们鼓励您探索对初学者友好的开放 Jira 任务,您可以在其中找到可以完成的任务。要处理任务,只需在工单中写下评论,说明您有兴趣参与。

阅读更多关于通用构建说明、  从构建目录运行 MariaDB自动启动和停止 MariaDB 的信息。

另请参阅