← 目录服务器的那些事儿

MySQL 源配置选项

2024/3/29

MySQL 源配置选项

CMake程序提供了对如何配置 MySQL 源代码分发的大量控制。通常,您可以使用 CMake命令行上的选项来执行此操作。有关CMake支持的选项的信息,请在顶级源目录中运行以下命令之一:

terminal
$> cmake . -LH

$> ccmake .

您还可以使用某些环境变量影响CMake 。请参见 第 6.9 节“环境变量”。

对于布尔选项,可以将该值指定为 1或ON来启用该选项,或者指定为0或OFF来禁用该选项。

许多选项配置编译时默认值,可以在服务器启动时覆盖这些默认值。例如, CMAKE_INSTALL_PREFIX配置 默认安装基目录位置、TCP/IP 端口号和 Unix 套接字文件的 、 和MYSQL_TCP_PORT选项 可以在服务器启动时使用mysqld 的、 和 选项 进行更改。在适用的情况下,配置选项描述指示相应的mysqld 启动选项。 MYSQL_UNIX_ADDR--basedir--port--socket

以下部分提供有关 CMake选项的更多信息。

CMake 选项参考

下表显示了可用的CMake 选项。其中Default, PREFIX代表 CMAKE_INSTALL_PREFIX选项的值,指定安装基目录。该值用作多个安装子目录的父位置。

表 2.13 MySQL 源配置选项参考 (CMake)

格式 描述 默认
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ADD_GDB_INDEX 是否启用二进制文件中 .gdb_index 部分的生成
- - -
BUILD_CONFIG 使用与官方版本相同的构建选项
BUNDLE_RUNTIME_LIBRARIES 将运行时库与适用于 Windows 的服务器 MSI 和 Zip 包捆绑在一起 OFF
CMAKE_BUILD_TYPE 要生产的构建类型 RelWithDebInfo
CMAKE_CXX_FLAGS C++ 编译器的标志
CMAKE_C_FLAGS C 编译器的标志
CMAKE_INSTALL_PREFIX 安装基目录 /usr/local/mysql
COMPILATION_COMMENT 编译环境评论
COMPILATION_COMMENT_SERVER 关于mysqld使用的编译环境的评论
COMPRESS_DEBUG_SECTIONS 压缩二进制可执行文件的调试部分 OFF
CPACK_MONOLITHIC_INSTALL 包构建是否生成单个文件 OFF
DEFAULT_CHARSET 默认服务器字符集 utf8mb4
DEFAULT_COLLATION 默认服务器排序规则 utf8mb4_0900_ai_ci
DISABLE_PSI_COND 排除性能架构条件检测 OFF
DISABLE_PSI_DATA_LOCK 排除性能模式数据锁检测 OFF
DISABLE_PSI_ERROR 排除性能架构服务器错误检测 OFF
DISABLE_PSI_FILE 排除性能架构文件检测 OFF
DISABLE_PSI_IDLE 排除性能架构空闲检测 OFF
DISABLE_PSI_MEMORY 排除性能架构内存检测 OFF
DISABLE_PSI_METADATA 排除性能架构元数据检测 OFF
DISABLE_PSI_MUTEX 排除性能架构互斥检测 OFF
DISABLE_PSI_PS 排除性能模式准备好的语句 OFF
DISABLE_PSI_RWLOCK 排除性能架构 rwlock 检测 OFF
DISABLE_PSI_SOCKET 排除性能架构套接字检测 OFF
DISABLE_PSI_SP 排除性能模式存储程序检测 OFF
DISABLE_PSI_STAGE 排除 Performance Schema 阶段仪表 OFF
DISABLE_PSI_STATEMENT 排除性能模式语句检测 OFF
DISABLE_PSI_STATEMENT_DIGEST 排除性能模式语句_摘要检测 OFF
DISABLE_PSI_TABLE 排除性能架构表检测 OFF
DISABLE_PSI_THREAD 排除性能模式线程检测 OFF
DISABLE_PSI_TRANSACTION 排除性能模式事务检测 OFF
ENABLED_LOCAL_INFILE 是否为LOAD DATA启用LOCAL OFF
ENABLED_PROFILING 是否启用查询分析代码 ON
ENABLE_EXPERIMENTAL_SYSVARS 是否启用实验性InnoDB系统变量 OFF
ENABLE_GCOV 是否包含 gcov 支持
ENABLE_GPROF 启用 gprof(仅限优化的 Linux 版本) OFF
FORCE_COLORED_OUTPUT 是否对编译器输出进行着色 OFF
FORCE_INSOURCE_BUILD 是否强制进行源内构建 OFF
FORCE_UNSUPPORTED_COMPILER 是否允许不支持的编译器 OFF
FPROFILE_GENERATE 是否生成配置文件引导优化数据 OFF
FPROFILE_USE 是否使用配置文件引导优化数据 OFF
HAVE_PSI_MEMORY_INTERFACE 为过度对齐类型的动态存储中使用的内存分配函数启用性能模式内存跟踪模块 OFF
IGNORE_AIO_CHECK 使用 -DBUILD_CONFIG=mysql_release,忽略 libaio 检查 OFF
INSTALL_BINDIR 用户可执行文件目录 PREFIX/bin
INSTALL_DOCDIR 文档目录 PREFIX/docs
INSTALL_DOCREADMEDIR 自述文件目录 PREFIX
INSTALL_INCLUDEDIR 头文件目录 PREFIX/include
INSTALL_INFODIR 信息文件目录 PREFIX/docs
INSTALL_LAYOUT 选择预定义的安装布局 STANDALONE
INSTALL_LIBDIR 库文件目录 PREFIX/lib
INSTALL_MANDIR 手册页目录 PREFIX/man
INSTALL_MYSQLKEYRINGDIR keyring_file 插件数据文件的目录 platform specific
INSTALL_MYSQLSHAREDIR 共享数据目录 PREFIX/share
INSTALL_MYSQLTESTDIR mysql-测试目录 PREFIX/mysql-test
INSTALL_PKGCONFIGDIR mysqlclient.pc pkg-config 文件的目录 INSTALL_LIBDIR/pkgconfig
INSTALL_PLUGINDIR 插件目录 PREFIX/lib/plugin
INSTALL_PRIV_LIBDIR 安装私有库目录
INSTALL_SBINDIR 服务器可执行目录 PREFIX/bin
INSTALL_SECURE_FILE_PRIVDIR secure_file_priv 默认值 platform specific
INSTALL_SHAREDIR aclocal/mysql.m4安装目录 PREFIX/share
INSTALL_STATIC_LIBRARIES 是否安装静态库 ON
INSTALL_SUPPORTFILESDIR 额外支持文件目录 PREFIX/support-files
LINK_RANDOMIZE 是否随机化 mysqld 二进制文件中符号的顺序 OFF
LINK_RANDOMIZE_SEED LINK_RANDOMIZE 选项的种子值 mysql
MAX_INDEXES 每个表的最大索引数 64
MSVC_CPPCHECK 启用 MSVC 代码分析。 ON
MUTEX_TYPE InnoDB互斥体类型 event
MYSQLX_TCP_PORT X 插件使用的 TCP/IP 端口号 33060
MYSQLX_UNIX_ADDR X 插件使用的 Unix 套接字文件 /tmp/mysqlx.sock
MYSQL_DATADIR 数据目录
MYSQL_MAINTAINER_MODE 是否启用MySQL维护者专用的开发环境 OFF
MYSQL_PROJECT_NAME Windows/macOS 项目名称 MySQL
MYSQL_TCP_PORT TCP/IP 端口号 3306
MYSQL_UNIX_ADDR Unix 套接字文件 /tmp/mysql.sock
NDB_UTILS_LINK_DYNAMIC 导致 NDB 工具动态链接到 ndbclient
ODBC_INCLUDES ODBC 包含目录
ODBC_LIB_DIR ODBC 库目录
OPTIMIZER_TRACE 是否支持优化器跟踪
OPTIMIZE_SANITIZER_BUILDS 是否优化消毒剂构建 ON
REPRODUCIBLE_BUILD 要格外小心地创建独立于构建位置和时间的构建结果
SHOW_SUPPRESSED_COMPILER_WARNING 是否显示抑制的编译器警告并且不会因 -Werror 而失败。 OFF
SYSCONFDIR 选项文件目录
SYSTEMD_PID_DIR systemd下PID文件的目录 /var/run/mysqld
SYSTEMD_SERVICE_NAME systemd下MySQL服务的名称 mysqld
TMPDIR tmpdir 默认值
WIN_DEBUG_NO_INLINE 是否禁用函数内联 OFF
WITHOUT_SERVER 不搭建服务器 OFF
WITHOUT_xxx_STORAGE_ENGINE 从构建中排除存储引擎 xxx
WITH_ANT 用于构建 GCS Java 包装器的 Ant 路径
WITH_ASAN 启用AddressSanitizer OFF
WITH_ASAN_SCOPE 启用 AddressSanitizer -fsanitize-address-use-after-scope Clang 标志 OFF
WITH_AUTHENTICATION_CLIENT_PLUGINS 如果构建了任何相应的服务器身份验证插件,则自动启用
WITH_AUTHENTICATION_LDAP LDAP认证插件无法构建时是否报错 OFF
WITH_AUTHENTICATION_PAM 构建 PAM 身份验证插件 OFF
WITH_AWS_SDK Amazon Web Services 软件开发工具包的位置
WITH_BUILD_ID 在 Linux 系统上,生成唯一的构建 ID ON
WITH_CLASSPATH 构建适用于 Java 的 MySQL Cluster Connector 时使用的类路径。默认为空字符串。
WITH_CLIENT_PROTOCOL_TRACING 构建客户端协议追踪框架 ON
WITH_CURL curl库的位置
WITH_DEBUG 是否包含调试支持 OFF
WITH_DEFAULT_COMPILER_OPTIONS 是否使用默认编译器选项 ON
WITH_DEVELOPER_ENTITLEMENTS 是否向 macOS 上的所有可执行文件添加“get-task-allow”权限,以便在服务器意外停止时生成核心转储 OFF
WITH_EDITLINE 使用哪个 libedit/editline 库 bundled
WITH_ERROR_INSERT 在 NDB 存储引擎中启用错误注入。不应用于构建用于生产的二进制文件。 OFF
WITH_FIDO FIDO 库支持的类型 bundled
WITH_ICU ICU 支持类型 bundled
WITH_INNODB_EXTRA_DEBUG 是否包含对 InnoDB 的额外调试支持。 OFF
WITH_JEMALLOC 是否与-ljemalloc链接 OFF
WITH_KEYRING_TEST 构建密钥环测试程序 OFF
WITH_LD 是否使用LLVM lld或mold链接器
WITH_LIBEVENT 使用哪个 libevent 库 bundled
WITH_LIBWRAP 是否包含libwrap(TCP包装器)支持 OFF
WITH_LOCK_ORDER 是否启用LOCK_ORDER工具 OFF
WITH_LSAN 是否运行LeakSanitizer,不运行AddressSanitizer OFF
WITH_LTO 启用链接时间优化器 OFF
WITH_LZ4 LZ4 库支持的类型 bundled
WITH_MECAB 编译 MeCab
WITH_MSAN 启用 MemorySanitizer OFF
WITH_MSCRT_DEBUG 启用 Visual Studio CRT 内存泄漏跟踪 OFF
WITH_MYSQLX 是否禁用X协议 ON
WITH_NDB 构建 MySQL NDB 集群 OFF
WITH_NDBAPI_EXAMPLES 构建API示例程序 OFF
WITH_NDBCLUSTER 构建NDB存储引擎 OFF
WITH_NDBCLUSTER_STORAGE_ENGINE 供内部使用;可能无法在所有情况下按预期工作;用户应该使用WITH_NDBCLUSTER来代替 ON
WITH_NDBMTD 构建多线程数据节点。 ON
WITH_NDB_DEBUG 生成用于测试或故障排除的调试版本。 OFF
WITH_NDB_JAVA 启用 Java 和 ClusterJ 支持的构建。默认启用。仅在 MySQL 集群中受支持。 ON
WITH_NDB_PORT 使用此选项构建的管理服务器使用的默认端口。如果未使用此选项来构建它,则管理服务器的默认端口为 1186。 [none]
WITH_NDB_TEST 包括 NDB API 测试程序。 OFF
WITH_NDB_TLS_SEARCH_PATH NDB 程序用于搜索 TLS 证书和密钥文件的默认路径。 $HOME/ndb-tls
WITH_NUMA 设置NUMA内存分配策略
WITH_PACKAGE_FLAGS 对于通常用于 RPM/DEB 包的标志,是否将它们添加到这些平台上的独立构建中
WITH_PROTOBUF 使用哪个 Protocol Buffers 包 bundled
WITH_RAPID 是否构建快速开发周期插件 ON
WITH_RAPIDJSON RapidJSON 支持的类型 bundled
WITH_ROUTER 是否构建MySQL Router ON
WITH_SHOW_PARSE_TREE 支持 SHOW PARSE_TREE 调试语句
WITH_SSL SSL 支持类型 system
WITH_SYSTEMD 启用 systemd 支持文件的安装 OFF
WITH_SYSTEMD_DEBUG 启用额外的 systemd 调试信息 OFF
WITH_SYSTEM_LIBS 设置未明确设置的库选项的系统值 OFF
WITH_TCMALLOC 是否与-ltcmalloc链接 OFF
WITH_TEST_TRACE_PLUGIN 构建测试协议跟踪插件 OFF
WITH_TSAN 启用 ThreadSanitizer OFF
WITH_UBSAN 启用未定义行为清理程序 OFF
WITH_UNIT_TESTS 使用单元测试编译 MySQL ON
WITH_UNIXODBC 启用 unixODBC 支持 OFF
WITH_VALGRIND 是否在Valgrind头文件中编译 OFF
WITH_WIN_JEMALLOC 包含 jemalloc.dll 的目录的路径
WITH_ZLIB zlib 支持的类型 bundled
WITH_ZSTD zstd 支持的类型 bundled
WITH_xxx_STORAGE_ENGINE 将存储引擎xxx静态编译到服务器中

常规选项

安装布局选项

该CMAKE_INSTALL_PREFIX选项指示基本安装目录。名称形式 指示组件位置的其他选项是相对于前缀进行解释的,它们的值是相对路径名。它们的值不应包含前缀。 INSTALL_<em class="replaceable"><code>xxx</code></em>

存储引擎选项

存储引擎是作为插件构建的。您可以将插件构建为静态模块(编译到服务器中)或动态模块(构建为动态库,必须使用INSTALL PLUGIN 语句或选项将其安装到服务器中--plugin-load 才能使用)。某些插件可能不支持静态或动态构建。

InnoDB、 MyISAM、 MERGE、 MEMORY和 引擎CSV是强制性的(始终编译到服务器中)并且不需要显式安装。

要将存储引擎静态编译到服务器中,请使用 .一些允许的值为 、、 和。例子: -DWITH_<em class="replaceable"><code>engine</code></em>_STORAGE_ENGINE=1engineARCHIVE``BLACKHOLE``EXAMPLE``FEDERATED

ini
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1

要构建支持 NDB Cluster 的 MySQL,请使用该 WITH_NDB选项。

笔记

如果没有性能模式支持,则无法进行编译。如果希望在不使用特定类型的工具的情况下进行编译,可以使用以下 CMake选项来完成:

simple
DISABLE_PSI_COND
DISABLE_PSI_DATA_LOCK
DISABLE_PSI_ERROR
DISABLE_PSI_FILE
DISABLE_PSI_IDLE
DISABLE_PSI_MEMORY
DISABLE_PSI_METADATA
DISABLE_PSI_MUTEX
DISABLE_PSI_PS
DISABLE_PSI_RWLOCK
DISABLE_PSI_SOCKET
DISABLE_PSI_SP
DISABLE_PSI_STAGE
DISABLE_PSI_STATEMENT
DISABLE_PSI_STATEMENT_DIGEST
DISABLE_PSI_TABLE
DISABLE_PSI_THREAD
DISABLE_PSI_TRANSACTION

例如,要在不使用互斥量检测的情况下进行编译,请使用 -DDISABLE_PSI_MUTEX=1.

要从构建中排除存储引擎,请使用 .例子: -DWITH_<em class="replaceable"><code>engine</code></em>_STORAGE_ENGINE=0

ini
-DWITH_ARCHIVE_STORAGE_ENGINE=0
-DWITH_EXAMPLE_STORAGE_ENGINE=0
-DWITH_FEDERATED_STORAGE_ENGINE=0

也可以从构建中排除存储引擎 (但这 是首选)。例子: -DWITHOUT_<em class="replaceable"><code>engine</code></em>_STORAGE_ENGINE=1``-DWITH_<em class="replaceable"><code>engine</code></em>_STORAGE_ENGINE=0

ini
-DWITHOUT_ARCHIVE_STORAGE_ENGINE=1
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1

如果给定存储引擎既没有 指定 也没有 指定,则该引擎将构建为共享模块,如果不能构建为共享模块则将其排除。 -DWITH_<em class="replaceable"><code>engine</code></em>_STORAGE_ENGINE``-DWITHOUT_<em class="replaceable"><code>engine</code></em>_STORAGE_ENGINE

功能选项

编译器标志

要指定您自己的 C 和 C++ 编译器标志,对于不影响优化的标志,请使用 CMAKE_C_FLAGS和 CMAKE_CXX_FLAGSCMake 选项。

CMAKE_BUILD_TYPE当提供您自己的编译器标志时,您可能还 需要指定。

例如,要在 64 位 Linux 计算机上创建 32 位发行版本,请执行以下操作:

terminal
$> mkdir build
$> cd build
$> cmake .. -DCMAKE_C_FLAGS=-m32 \
  -DCMAKE_CXX_FLAGS=-m32 \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo

如果设置影响优化的标志 ( ),则必须设置 和/或 选项,其中对应于值。要为默认构建类型 ( ) 指定不同的优化,请设置 和 选项。例如,要在 Linux 上使用调试符号进行编译,请执行以下操作: -O<em class="replaceable"><code>number</code></em>``CMAKE_C_FLAGS_<em class="replaceable"><code>build_type</code></em>``CMAKE_CXX_FLAGS_<em class="replaceable"><code>build_type</code></em>build_typeCMAKE_BUILD_TYPERelWithDebInfo``CMAKE_C_FLAGS_RELWITHDEBINFO``CMAKE_CXX_FLAGS_RELWITHDEBINFO``-O3

terminal
$> cmake .. -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O3 -g" \
  -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O3 -g"

用于编译 NDB Cluster 的 CMake 选项

以下选项可在构建具有 NDB Cluster 支持的 MySQL 源时使用。