MySQL 源配置选项


MySQL 源配置选项

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

$> cmake . -LH
$> ccmake .

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

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

许多选项配置编译时默认值,可以在服务器启动时覆盖这些默认值。例如, 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_FLAGSC++ 编译器的标志
CMAKE_C_FLAGSC 编译器的标志
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启用LOCALOFF
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_MYSQLKEYRINGDIRkeyring_file 插件数据文件的目录platform specific
INSTALL_MYSQLSHAREDIR共享数据目录PREFIX/share
INSTALL_MYSQLTESTDIRmysql-测试目录PREFIX/mysql-test
INSTALL_PKGCONFIGDIRmysqlclient.pc pkg-config 文件的目录INSTALL_LIBDIR/pkgconfig
INSTALL_PLUGINDIR插件目录PREFIX/lib/plugin
INSTALL_PRIV_LIBDIR安装私有库目录
INSTALL_SBINDIR服务器可执行目录PREFIX/bin
INSTALL_SECURE_FILE_PRIVDIRsecure_file_priv 默认值platform specific
INSTALL_SHAREDIRaclocal/mysql.m4安装目录PREFIX/share
INSTALL_STATIC_LIBRARIES是否安装静态库ON
INSTALL_SUPPORTFILESDIR额外支持文件目录PREFIX/support-files
LINK_RANDOMIZE是否随机化 mysqld 二进制文件中符号的顺序OFF
LINK_RANDOMIZE_SEEDLINK_RANDOMIZE 选项的种子值mysql
MAX_INDEXES每个表的最大索引数64
MSVC_CPPCHECK启用 MSVC 代码分析。ON
MUTEX_TYPEInnoDB互斥体类型event
MYSQLX_TCP_PORTX 插件使用的 TCP/IP 端口号33060
MYSQLX_UNIX_ADDRX 插件使用的 Unix 套接字文件/tmp/mysqlx.sock
MYSQL_DATADIR数据目录
MYSQL_MAINTAINER_MODE是否启用MySQL维护者专用的开发环境OFF
MYSQL_PROJECT_NAMEWindows/macOS 项目名称MySQL
MYSQL_TCP_PORTTCP/IP 端口号3306
MYSQL_UNIX_ADDRUnix 套接字文件/tmp/mysql.sock
NDB_UTILS_LINK_DYNAMIC导致 NDB 工具动态链接到 ndbclient
ODBC_INCLUDESODBC 包含目录
ODBC_LIB_DIRODBC 库目录
OPTIMIZER_TRACE是否支持优化器跟踪
OPTIMIZE_SANITIZER_BUILDS是否优化消毒剂构建ON
REPRODUCIBLE_BUILD要格外小心地创建独立于构建位置和时间的构建结果
SHOW_SUPPRESSED_COMPILER_WARNING是否显示抑制的编译器警告并且不会因 -Werror 而失败。OFF
SYSCONFDIR选项文件目录
SYSTEMD_PID_DIRsystemd下PID文件的目录/var/run/mysqld
SYSTEMD_SERVICE_NAMEsystemd下MySQL服务的名称mysqld
TMPDIRtmpdir 默认值
WIN_DEBUG_NO_INLINE是否禁用函数内联OFF
WITHOUT_SERVER不搭建服务器OFF
WITHOUT_xxx_STORAGE_ENGINE从构建中排除存储引擎 xxx
WITH_ANT用于构建 GCS Java 包装器的 Ant 路径
WITH_ASAN启用AddressSanitizerOFF
WITH_ASAN_SCOPE启用 AddressSanitizer -fsanitize-address-use-after-scope Clang 标志OFF
WITH_AUTHENTICATION_CLIENT_PLUGINS如果构建了任何相应的服务器身份验证插件,则自动启用
WITH_AUTHENTICATION_LDAPLDAP认证插件无法构建时是否报错OFF
WITH_AUTHENTICATION_PAM构建 PAM 身份验证插件OFF
WITH_AWS_SDKAmazon Web Services 软件开发工具包的位置
WITH_BUILD_ID在 Linux 系统上,生成唯一的构建 IDON
WITH_CLASSPATH构建适用于 Java 的 MySQL Cluster Connector 时使用的类路径。默认为空字符串。
WITH_CLIENT_PROTOCOL_TRACING构建客户端协议追踪框架ON
WITH_CURLcurl库的位置
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_FIDOFIDO 库支持的类型bundled
WITH_ICUICU 支持类型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,不运行AddressSanitizerOFF
WITH_LTO启用链接时间优化器OFF
WITH_LZ4LZ4 库支持的类型bundled
WITH_MECAB编译 MeCab
WITH_MSAN启用 MemorySanitizerOFF
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_PATHNDB 程序用于搜索 TLS 证书和密钥文件的默认路径。$HOME/ndb-tls
WITH_NUMA设置NUMA内存分配策略
WITH_PACKAGE_FLAGS对于通常用于 RPM/DEB 包的标志,是否将它们添加到这些平台上的独立构建中
WITH_PROTOBUF使用哪个 Protocol Buffers 包bundled
WITH_RAPID是否构建快速开发周期插件ON
WITH_RAPIDJSONRapidJSON 支持的类型bundled
WITH_ROUTER是否构建MySQL RouterON
WITH_SHOW_PARSE_TREE支持 SHOW PARSE_TREE 调试语句
WITH_SSLSSL 支持类型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启用 ThreadSanitizerOFF
WITH_UBSAN启用未定义行为清理程序OFF
WITH_UNIT_TESTS使用单元测试编译 MySQLON
WITH_UNIXODBC启用 unixODBC 支持OFF
WITH_VALGRIND是否在Valgrind头文件中编译OFF
WITH_WIN_JEMALLOC包含 jemalloc.dll 的目录的路径
WITH_ZLIBzlib 支持的类型bundled
WITH_ZSTDzstd 支持的类型bundled
WITH_xxx_STORAGE_ENGINE将存储引擎xxx静态编译到服务器中


常规选项

  • -DBUILD_CONFIG=mysql_release

    此选项使用与 Oracle 用于生成官方 MySQL 版本的二进制发行版相同的构建选项来配置源发行版。

  • -DWITH_BUILD_ID=bool

    在 Linux 系统上,生成一个唯一的构建 ID,用作 build_id系统变量的值并在启动时写入 MySQL 服务器日志。将此选项设置为OFF禁用此功能。

    该选项对 Linux 以外的平台没有影响。

  • -DBUNDLE_RUNTIME_LIBRARIES=bool

    是否将运行时库与 Windows 的服务器 MSI 和 Zip 包捆绑在一起。

  • -DCMAKE_BUILD_TYPE=type

    要生成的构建类型:

    不支持 选项值None和 。MinSizeRel

    • RelWithDebInfo:启用优化并生成调试信息。这是默认的 MySQL 构建类型。

    • Release:启用优化但省略调试信息以减少构建大小。

    • Debug:禁用优化并生成调试信息。如果WITH_DEBUG 启用该选项,也会使用此构建类型。即与 -DWITH_DEBUG=1具有相同的效果 -DCMAKE_BUILD_TYPE=Debug

  • -DCPACK_MONOLITHIC_INSTALL=bool

    该选项影响make package操作是生成多个安装包文件还是单个文件。如果禁用,该操作会生成多个安装包文件,如果您只想安装完整 MySQL 安装的子集,这可能很有用。如果启用,它会生成一个用于安装所有内容的文件。

  • -DFORCE_INSOURCE_BUILD=bool

    定义是否强制进行源内构建。建议使用源外构建,因为它们允许来自同一源的多个构建,并且可以通过删除构建目录来快速执行清理。要强制进行源内构建,请 使用-DFORCE_INSOURCE_BUILD=ON.

  • -DFORCE_COLORED_OUTPUT=bool

    定义在命令行编译时 是否启用 gccclang的彩色编译器输出。默认为 OFF.

安装布局选项

CMAKE_INSTALL_PREFIX选项指示基本安装目录。名称形式 指示组件位置的其他选项是相对于前缀进行解释的,它们的值是相对路径名。它们的值不应包含前缀。 INSTALL_xxx

存储引擎选项

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

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

要将存储引擎静态编译到服务器中,请使用 .一些允许的值为 、 。例子: -DWITH_engine_STORAGE_ENGINE=1engineARCHIVEBLACKHOLEEXAMPLEFEDERATED

-DWITH_ARCHIVE_STORAGE_ENGINE=1-DWITH_BLACKHOLE_STORAGE_ENGINE=1

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

笔记

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

DISABLE_PSI_CONDDISABLE_PSI_DATA_LOCKDISABLE_PSI_ERRORDISABLE_PSI_FILEDISABLE_PSI_IDLEDISABLE_PSI_MEMORYDISABLE_PSI_METADATADISABLE_PSI_MUTEXDISABLE_PSI_PSDISABLE_PSI_RWLOCKDISABLE_PSI_SOCKETDISABLE_PSI_SPDISABLE_PSI_STAGEDISABLE_PSI_STATEMENTDISABLE_PSI_STATEMENT_DIGESTDISABLE_PSI_TABLEDISABLE_PSI_THREADDISABLE_PSI_TRANSACTION

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

要从构建中排除存储引擎,请使用 .例子: -DWITH_engine_STORAGE_ENGINE=0

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

也可以从构建中排除存储引擎 (但这 是首选)。例子: -DWITHOUT_engine_STORAGE_ENGINE=1-DWITH_engine_STORAGE_ENGINE=0

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

如果给定存储引擎既没有 指定 也没有 指定,则该引擎将构建为共享模块,如果不能构建为共享模块则将其排除。 -DWITH_engine_STORAGE_ENGINE-DWITHOUT_engine_STORAGE_ENGINE

功能选项

  • -DADD_GDB_INDEX=bool

    此选项确定是否启用 .gdb_index二进制文件中的节的生成,这使得将它们更快地加载到调试器中。默认情况下该选项处于禁用状态。使用lld链接器,并通过 禁用它。如果使用 lld或 GNU gold以外的链接器,则无效 。

  • -DCOMPILATION_COMMENT=string

    关于编译环境的描述性注释。当mysqld使用 时COMPILATION_COMMENT_SERVER,其他程序也使用 COMPILATION_COMMENT.

  • -DCOMPRESS_DEBUG_SECTIONS=bool

    是否压缩二进制可执行文件的调试部分(仅限 Linux)。压缩可执行调试部分可以节省空间,但代价是在构建过程中需要额外的 CPU 时间。

    默认为OFF.如果未显式设置此选项但 COMPRESS_DEBUG_SECTIONS设置了环境变量,则该选项将从该变量获取其值。

  • -DCOMPILATION_COMMENT_SERVER=string

    关于mysqld使用的编译环境的描述性注释(例如,设置 version_comment系统变量)。服务器以外的程序使用 COMPILATION_COMMENT

  • -DDEFAULT_CHARSET=charset_name

    服务器字符集。默认情况下,MySQL 使用该 utf8mb4字符集。

    charset_name可以 以下之一 binaryarmscii8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, asciibig5cp1250cp1251cp1256cp1257cp850cp852cp866cp932dec8eucjpmseuckrgb2312gbkgeostd8greekhebrewhp8keybcs2koi8rkoi8ulatin1latin2latin5latin7maccemacromansjisswe7tis620ucs2ujisutf8mb3utf8mb4utf16utf16leutf32

    可以在服务器启动时使用该选项设置该值 --character-set-server 。

  • -DDEFAULT_COLLATION=collation_name

    服务器排序规则。默认情况下,MySQL 使用 utf8mb4_0900_ai_ci.使用该 SHOW COLLATION语句确定每个字符集可用的排序规则。

    可以在服务器启动时使用该选项设置该值 --collation_server

  • -DDISABLE_PSI_COND=bool

    是否排除性能模式条件检测。默认为OFF (包含)。

  • -DDISABLE_PSI_FILE=bool

    是否排除性能架构文件检测。默认为OFF (包含)。

  • -DDISABLE_PSI_IDLE=bool

    是否排除性能模式空闲检测。默认为OFF (包含)。

  • -DDISABLE_PSI_MEMORY=bool

    是否排除性能模式内存检测。默认为OFF (包含)。

  • -DDISABLE_PSI_METADATA=bool

    是否排除性能模式元数据检测。默认为OFF (包含)。

  • -DDISABLE_PSI_MUTEX=bool

    是否排除性能模式互斥检测。默认为OFF (包含)。

  • -DDISABLE_PSI_RWLOCK=bool

    是否排除性能架构 rwlock 检测。默认为OFF (包含)。

  • -DDISABLE_PSI_SOCKET=bool

    是否排除性能模式套接字检测。默认为OFF (包含)。

  • -DDISABLE_PSI_SP=bool

    是否排除性能模式存储的程序检测。默认为OFF (包含)。

  • -DDISABLE_PSI_STAGE=bool

    是否排除 Performance Schema 阶段检测。默认为OFF (包含)。

  • -DDISABLE_PSI_STATEMENT=bool

    是否排除 Performance Schema 语句检测。默认为OFF (包含)。

  • -DDISABLE_PSI_STATEMENT_DIGEST=bool

    是否排除性能模式语句摘要检测。默认为OFF (包含)。

  • -DDISABLE_PSI_TABLE=bool

    是否排除性能模式表检测。默认为OFF (包含)。

  • -DDISABLE_PSI_PS=bool

    排除性能模式准备好的语句实例检测。默认为OFF (包含)。

  • -DDISABLE_PSI_THREAD=bool

    排除性能模式线程检测。默认为OFF(包含)。

    仅在没有任何检测的情况下构建时禁用线程,因为其他检测依赖于线程。

  • -DDISABLE_PSI_TRANSACTION=bool

    排除性能模式事务工具。默认为OFF(包含)。

  • -DDISABLE_PSI_DATA_LOCK=bool

    排除性能模式数据锁检测。默认为OFF(包含)。

  • -DDISABLE_PSI_ERROR=bool

    排除性能模式服务器错误检测。默认为OFF(包含)。

  • -DENABLE_EXPERIMENTAL_SYSVARS=bool

    是否启用实验InnoDB 系统变量。实验系统变量适用于那些从事 MySQL 开发的人员,只能在开发或测试环境中使用,并且可能会在未来的 MySQL 版本中删除,恕不另行通知。有关实验系统变量的信息,请参阅 /storage/innobase/handler/ha_innodb.cc MySQL 源代码树。实验系统变量可以通过搜索“ PLUGIN_VAR_EXPERIMENTAL ”来识别 

  • -DWITHOUT_SERVER=bool

    是否构建不带MySQL Server。默认值为“关闭”,这会构建服务器。

    这被认为是一个实验性的选择;最好与服务器一起构建。

  • -DENABLE_GCOV=bool

    是否包含gcov支持(仅限 Linux)。

  • -DENABLE_GPROF=bool

    是否启用gprof(仅限优化的 Linux 版本)。

  • -DENABLED_LOCAL_INFILE=bool

    LOCAL该选项控制MySQL 客户端库的 编译默认 功能。因此,未做出明确安排的客户端会LOCAL根据 ENABLED_LOCAL_INFILEMySQL 构建时指定的设置禁用或启用功能。

    默认情况下,MySQL 二进制发行版中的客户端库在编译时 ENABLED_LOCAL_INFILE禁用。如果您从源代码编译 MySQL,请 ENABLED_LOCAL_INFILE根据未做出明确安排的客户端是否应禁用或启用LOCAL功能分别将其配置为禁用或启用。

    ENABLED_LOCAL_INFILE控制客户端LOCAL 功能的默认值。对于服务器来说, local_infile系统变量控制服务器端的LOCAL 能力。要显式地使服务器拒绝或允许LOAD DATA LOCAL语句(无论客户端程序和库在构建时或运行时如何配置),请分别以 禁用或启用的方式启动mysqld--local-infile。 local_infile也可以在运行时设置。请参见 第 8.1.6 节“LOAD DATA LOCAL 的安全注意事项”

  • -DENABLED_PROFILING=bool

    是否启用查询分析代码(对于 SHOW PROFILE和 SHOW PROFILES语句)。

  • -DFORCE_UNSUPPORTED_COMPILER=bool

    默认情况下,CMake检查支持的编译器的最低版本 ;要禁用此检查,请使用 -DFORCE_UNSUPPORTED_COMPILER=ON.

  • -DSHOW_SUPPRESSED_COMPILER_WARNINGS=bool

    显示抑制的编译器警告,并且这样做不会因-Werror.默认为 OFF.

  • -DFPROFILE_GENERATE=bool

    是否生成配置文件引导优化 (PGO) 数据。此选项可用于通过 GCC 试验 PGO。cmake/fprofile.cmake有关使用 FPROFILE_GENERATE和 的 信息,请参阅MySQL 源代码发行版FPROFILE_USE。这些选项已使用 GCC 8 和 9 进行了测试。

  • -DFPROFILE_USE=bool

    是否使用配置文件引导优化 (PGO) 数据。此选项可用于通过 GCC 试验 PGO。cmake/fprofile.cmake有关使用 FPROFILE_GENERATE和 的 信息,请参阅MySQL 源代码发行版中的文件FPROFILE_USE。这些选项已使用 GCC 8 和 9 进行了测试。

    启用FPROFILE_USE还可以启用WITH_LTO.

  • -DHAVE_PSI_MEMORY_INTERFACE=bool

    是否为过度对齐类型的动态存储中使用的 内存分配函数(库函数)启用性能模式内存跟踪模块。ut::aligned_name

  • -DIGNORE_AIO_CHECK=bool

    如果 -DBUILD_CONFIG=mysql_release 在 Linux 上给出该选项,则libaio 默认情况下必须链接该库。如果您没有 libaio或不想安装它,您可以通过指定 来取消对它的检查 -DIGNORE_AIO_CHECK=1

  • -DMAX_INDEXES=num

    每个表的最大索引数。默认值为 64。最大值为 255。小于 64 的值将被忽略,并使用默认值 64。

  • -DMYSQL_MAINTAINER_MODE=bool

    是否启用 MySQL 维护者特定的开发环境。如果启用,此选项会导致编译器警告变为错误。

  • -DWITH_DEVELOPER_ENTITLEMENTS=bool

    是否get-task-allow 向所有可执行文件添加在服务器意外停止时生成核心转储的权利。

    在 macOS 11+ 上,核心转储仅限于具有 com.apple.security.get-task-allow 此 CMake 选项启用的权利的进程。该权利允许其他进程附加和读取/修改进程内存,并允许 --core-file按预期运行。

  • -DMUTEX_TYPE=type

    所使用的互斥锁类型InnoDB。选项包括:

    • event:使用事件互斥体。这是默认值和原始InnoDB 互斥体实现。

    • sys:在 UNIX 系统上使用 POSIX 互斥体。使用CRITICAL_SECTIONWindows 上的对象(如果可用)。

    • futex:使用 Linux futexes 而不是条件变量来调度等待线程。

  • -DMYSQLX_TCP_PORT=port_num

    X Plugin 侦听 TCP/IP 连接的端口号。默认值为 33060。

    该值可以在服务器启动时使用系统变量设置 mysqlx_port

  • -DMYSQLX_UNIX_ADDR=file_name

    服务器侦听 X 插件套接字连接的 Unix 套接字文件路径。这必须是绝对路径名。默认为/tmp/mysqlx.sock.

    该值可以在服务器启动时使用系统变量设置 mysqlx_port

  • -DMYSQL_PROJECT_NAME=name

    对于 Windows 或 macOS,要合并到项目文件名中的项目名称。

  • -DMYSQL_TCP_PORT=port_num

    服务器侦听 TCP/IP 连接的端口号。默认值为 3306。

    可以在服务器启动时使用该选项设置该值 --port

  • -DMYSQL_UNIX_ADDR=file_name

    服务器侦听套接字连接的 Unix 套接字文件路径。这必须是绝对路径名。默认为/tmp/mysql.sock.

    可以在服务器启动时使用该选项设置该值 --socket

  • -DOPTIMIZER_TRACE=bool

    是否支持优化器跟踪。请参阅 MySQL 内部原理:跟踪优化器

  • -DREPRODUCIBLE_BUILD=bool

    对于 Linux 系统上的构建,此选项控制是否格外小心地创建独立于构建位置和时间的构建结果。

    此选项默认用于ON构建 RelWithDebInfo

  • -DWITH_LD=string

    CMake默认使用标准链接器。可以选择传入lld或 mold来指定替代链接器。 模具必须是版本 2 或更新版本。

    此选项可用于除 Enterprise Linux 之外的基于 Linux 的系统,Enterprise Linux 始终使用 ld链接器。

    笔记

    以前,该选项USE_LD_LLD可用于启用(默认)或显式禁用 Clang 的 LLVM lld链接器。在 MySQL 8.3 中,USE_LD_LLD已被删除。

  • -DWIN_DEBUG_NO_INLINE=bool

    是否在 Windows 上禁用函数内联。默认值为OFF(启用内联)。

  • -DWITH_ANT=path_name

    设置 Ant 的路径,这是构建 GCS Java 包装器时所需的。设置WITH_ANT为保存 Ant tarball 或解压存档的目录路径。当 WITH_ANT未设置或使用特殊值设置时system,构建过程假定二进制文件ant存在于 中 $PATH

  • -DWITH_ASAN=bool

    是否启用AddressSanitizer,对于支持它的编译器。默认为OFF.

  • -DWITH_ASAN_SCOPE=bool

    是否启用 AddressSanitizer -fsanitize-address-use-after-scopeClang 标志以进行作用域后使用检测。默认关闭。要使用此选项,-DWITH_ASAN 还必须启用。

  • -DWITH_AUTHENTICATION_CLIENT_PLUGINS=bool

    如果构建了任何相应的服务器身份验证插件,则会自动启用此选项。因此,它的值取决于其他CMake选项,不应显式设置。

  • -DWITH_AUTHENTICATION_LDAP=bool

    LDAP认证插件无法构建时是否报错:

    • 如果禁用此选项(默认),则在找到所需的头文件和库时构建 LDAP 插件。如果不是, CMake会显示有关它的注释。

    • 如果启用此选项,则无法找到所需的头文件和库会导致 CMake 产生错误,从而阻止构建服务器。

  • -DWITH_AUTHENTICATION_PAM=bool

    是否为包含此插件的源树构建 PAM 身份验证插件。 (请参见 第 8.4.1.5 节“PAM 可插入身份验证”。)如果指定了此选项并且无法编译插件,则构建会失败。

  • -DWITH_AWS_SDK=path_name

    Amazon Web Services 软件开发工具包的位置。

  • -DWITH_CLIENT_PROTOCOL_TRACING=bool

    是否将客户端协议追踪框架构建到客户端库中。默认情况下,此选项处于启用状态。

    有关编写协议跟踪客户端插件的信息,请参阅编写协议跟踪插件

    另请参阅 WITH_TEST_TRACE_PLUGIN选项。

  • -DWITH_CURL=curl_type

    图书馆的位置curl。 curl_type可以是 system(使用系统 curl库)、库的路径名 curl、 nooff|none 禁用curl支持,或者bundled使用 extra/curl/.

  • -DWITH_DEBUG=bool

    是否包含调试支持。

    通过配置 MySQL 的调试支持,您可以--debug="d,parser_debug" 在启动服务器时使用该选项。这会导致用于处理 SQL 语句的 Bison 解析器将解析器跟踪转储到服务器的标准错误输出。通常,此输出会写入错误日志。

    存储引擎的同步调试检查InnoDB 在下面定义 UNIV_DEBUG,并且在使用该选项编译调试支持时可用 WITH_DEBUG。当编译了调试支持时, innodb_sync_debug 配置选项可用于启用或禁用 InnoDB同步调试检查。

    启用WITH_DEBUG还会启用调试同步。该设施用于测试和调试。编译后,调试同步在运行时默认处于禁用状态。要启用它,请 使用以下 选项启动mysqld ,其中是大于 0 的超时值。(默认值为 0,这将禁用调试同步。)成为各个同步点的默认超时。 --debug-sync-timeout=NNN

    InnoDB 当使用该选项编译调试支持时,可以使用存储引擎 的同步调试检查WITH_DEBUG

    有关调试同步工具以及如何使用同步点的说明,请参阅 MySQL 内部:测试同步

  • -DWITH_EDITLINE=value

    使用 哪个libedit/库。editline允许的值为 bundled(默认值) 和 system

  • -DWITH_FIDO=fido_type

    身份验证插件authentication_fido是使用 FIDO 库实现的(请参阅 第 8.4.1.12 节“FIDO 可插入身份验证”)。该 WITH_FIDO选项指示 FIDO 支持的来源:

    WITH_FIDOnone如果禁用所有身份验证插件,则被 禁用(设置为 )。

    • bundled:使用与发行版捆绑在一起的 FIDO 库。这是默认设置。

      MySQL 包含fido2版本 1.8.0。

    • system:使用系统FIDO库。

  • -DWITH_ICU={icu_type|path_name}

    MySQL 使用 International Components for Unicode (ICU) 来支持正则表达式操作。该 WITH_ICU选项指示要包含的 ICU 支持类型或要使用的 ICU 安装的路径名。

    • bundled:使用与发行版捆绑在一起的 ICU 库。这是默认选项,也是 Windows 唯一支持的选项。

    • system:使用系统ICU库。

    • icu_type可以是以下值之一:

    • path_name是要使用的 ICU 安装的路径名。这比使用 的icu_type值 更可取,system因为它可以防止 CMake 检测和使用系统上安装的较旧或不正确的 ICU 版本。 (执行相同操作的另一种允许方法是设置WITH_ICU 为system并将 CMAKE_PREFIX_PATH选项设置为 path_name。)

  • -DWITH_INNODB_EXTRA_DEBUG=bool

    是否包含额外的 InnoDB 调试支持。

    启用WITH_INNODB_EXTRA_DEBUG会开启额外的 InnoDB 调试检查。该选项只有在WITH_DEBUG启用 时才可以启用。

  • -DWITH_JEMALLOC=bool

    是否链接到-ljemalloc.如果启用,内置malloc()、 calloc()realloc()free()例程将被禁用。默认为OFF.

    WITH_JEMALLOC并且 WITH_TCMALLOC是互斥的。

  • -DWITH_WIN_JEMALLOC=string

    jemalloc.dll在 Windows 上,传入包含启用 jemalloc 功能的 目录的路径 。构建系统将其复制 到与和/或 jemalloc.dll相同的目录, 并将其用于内存管理操作。如果找不到或未导出所需的函数,则使用标准内存函数。 INFORMATION 级别的日志消息记录是否找到并使用了 jemalloc。 mysqld.exemysqld-debug.exejemalloc.dll

    此选项针对 Windows 官方 MySQL 二进制文件启用。

  • -DWITH_KEYRING_TEST=bool

    是否构建插件附带的测试程序 keyring_file。默认为 OFF.测试文件源代码位于该plugin/keyring/keyring-test 目录中。

  • -DWITH_LIBEVENT=string

    libevent使用 哪个库。允许的值为bundled(默认)和 system。如果system指定并且找不到系统libevent库,则无论如何都会发生错误,并且 libevent不使用捆绑的。

    memcached、X Plugin 和 MySQL Router libevent需要 该库。InnoDB

  • -DWITH_LIBWRAP=bool

    是否包含libwrap(TCP 包装器)支持。

  • -DWITH_LOCK_ORDER=bool

    是否启用 LOCK_ORDER 工具。默认情况下,此选项处于禁用状态,并且服务器版本不包含任何工具。如果启用了工具,则 LOCK_ORDER 工具可用,并且可以按照第 7.9.3 节 “LOCK_ORDER 工具”中所述使用。

    笔记

    启用该WITH_LOCK_ORDER 选项后,MySQL 构建需要 flex程序。

  • -DWITH_LSAN=bool

    是否运行 LeakSanitizer,而不运行 AddressSanitizer。默认为OFF.

  • -DWITH_LTO=bool

    是否启用链接时优化器(如果编译器支持)。默认为OFF除非 FPROFILE_USE启用。

  • -DWITH_LZ4=lz4_type

    WITH_LZ4选项指示支持来源zlib

    • bundled:使用 lz4与发行版捆绑在一起的库。这是默认设置。

    • system:使用系统 lz4库。如果 WITH_LZ4设置为此值,则不会构建lz4_decompress实用程序。在这种情况下,可以使用 系统 lz4命令来代替。

  • -DWITH_MECAB={disabled|system|path_name}

    使用此选项编译 MeCab 解析器。如果您已将 MeCab 安装到其默认安装目录,请设置 -DWITH_MECAB=system.该 system选项适用于使用本机包管理实用程序从源代码或二进制文件执行的 MeCab 安装。如果您将 MeCab 安装到自定义安装目录,请指定 MeCab 安装路径,例如 -DWITH_MECAB=/opt/mecab。如果该 system选项不起作用,则指定 MeCab 安装路径应该在所有情况下都有效。

    有关相关信息,请参阅 第 14.9.9 节 “MeCab 全文解析器插件”

  • -DWITH_MSAN=bool

    是否启用 MemorySanitizer,对于支持它的编译器。默认关闭。

    为了使该选项在启用后生效,链接到 MySQL 的所有库也必须在启用该选项的情况下进行编译。

  • -DWITH_MSCRT_DEBUG=bool

    是否启用 Visual Studio CRT 内存泄漏跟踪。默认为OFF.

  • -DMSVC_CPPCHECK=bool

    是否启用MSVC代码分析。默认为 ON.

  • -DWITH_MYSQLX=bool

    是否构建支持 X Plugin。默认为 ON.请参阅第 22 章,使用 MySQL 作为文档存储

  • -DWITH_NUMA=bool

    显式设置 NUMA 内存分配策略。 CMakeWITH_NUMA根据当前平台是否支持来设置默认 值NUMA 。对于不支持 NUMA 的平台, CMake 的行为如下:

    • 如果没有 NUMA 选项(正常情况), CMake会正常继续,仅生成此警告:NUMA 库丢失或所需版本不可用

    • 使用 时-DWITH_NUMA=ON, CMake会中止并出现以下错误: NUMA 库丢失或所需版本不可用

  • -DWITH_PACKAGE_FLAGS=bool

    对于通常用于 RPM 和 Debian 软件包的标志,是否将它们添加到这些平台上的独立构建中。默认值适用ON于非调试版本。

  • -DWITH_PROTOBUF=protobuf_type

    使用哪个 Protocol Buffers 包。 protobuf_type可以是以下值之一:

    其他值将被忽略,并回退到 bundled.

    • bundled:使用与发行版捆绑在一起的包。这是默认设置。 (可选)用于 INSTALL_PRIV_LIBDIR修改动态 Protobuf 库目录。

    • system:使用系统上安装的软件包。

  • -DWITH_RAPID=bool

    是否构建快速开发周期插件。启用后,rapid将在包含这些插件的构建树中创建一个目录。禁用时,不会rapid在构建树中创建任何目录。默认值为ON,除非该 rapid目录已从源代码树中删除,在这种情况下默认值为 OFF

  • -DWITH_RAPIDJSON=rapidjson_type

    要包含的 RapidJSON 库支持的类型。 rapidjson_type可以是以下值之一:

    • bundled:使用与发行版捆绑在一起的 RapidJSON 库。这是默认设置。

    • system:使用系统RapidJSON库。需要 1.1.0 或更高版本。

  • -DWITH_ROUTER=bool

    是否构建MySQL Router。默认为 ON.

  • -DWITH_SSL={ssl_typepath_name}

    为了支持加密连接、随机数生成的熵以及其他与加密相关的操作,MySQL 必须使用 SSL 库构建。此选项指定要使用哪个 SSL 库。

    有关配置 SSL 库的其他信息,请参阅 第 2.8.6 节 “配置 SSL 库支持”

    • system:使用系统OpenSSL库。这是默认设置。

      在 macOS 和 Windows 上,使用 system配置 MySQL 进行构建,就像通过 path_name指向手动安装的 OpenSSL 库调用 CMake 一样。这是因为他们没有系统 SSL 库。在 macOS 上, brew install openssl会安装到,/usr/local/opt/openssl以便system可以找到它。在 Windows 上,它检查 %ProgramFiles%/OpenSSL、 %ProgramFiles%/OpenSSL-Win32、 %ProgramFiles%/OpenSSL-Win64、 C:/OpenSSL、 C:/OpenSSL-Win32和 C:/OpenSSL-Win64

    • yes: 这是 的同义词 system

    • opensslversion:使用备用 OpenSSL 系统软件包,例如 openssl11在 EL7 上,或 openssl3(或 openssl3-fips)在 EL8 上。

      身份验证插件(例如 LDAP 和 Kerberos)被禁用,因为它们不支持这些替代版本的 OpenSSL。

    • ssl_type可以是以下值之一:

    • path_name是要使用的 OpenSSL 安装的路径名。这比使用该ssl_type值 更可取,system因为它可以防止 CMake 检测和使用系统上安装的较旧或不正确的 OpenSSL 版本。 (执行相同操作的另一种允许方法是设置WITH_SSL 为system并将 CMAKE_PREFIX_PATH选项设置为 path_name。)

  • -DWITH_SHOW_PARSE_TREE=bool

    SHOW PARSE_TREE在服务器中 启用支持,仅用于开发和调试。不用于发布版本或在生产中受支持。

  • -DWITH_SYSTEMD=bool

    是否启用systemd 支持文件的安装。默认情况下,此选项处于禁用状态。启用后,将安装systemd支持文件,但不会安装mysqld_safe和 System V 初始化脚本等脚本 。在systemd不可用的 平台上 ,启用会导致CMakeWITH_SYSTEMD出错

    当使用此选项构建服务器时,MySQL 会将所有systemd消息包含在服务器的错误日志中(请参见第 7.4.2 节“错误日志”)。

    有关使用systemd 的更多信息,请参阅第 2.5.9 节 “使用 systemd 管理 MySQL 服务器”。该部分还包括有关指定选项组中其他指定选项的信息[mysqld_safe]。由于使用systemd时未安装 mysqld_safe,因此必须以其他方式指定此类选项。

  • -DWITH_SYSTEM_LIBS=bool

    此选项充当选项,用于设置system以下任何未显式设置的CMakeWITH_CURL选项的值: , WITH_EDITLINEWITH_FIDOWITH_ICUWITH_LIBEVENTWITH_LZ4WITH_LZMAWITH_PROTOBUFWITH_RE2WITH_SSLWITH_ZLIBWITH_ZSTD

  • -DWITH_SYSTEMD_DEBUG=bool

    对于使用systemd运行 MySQL的平台, 是否生成额外的systemd 调试信息 。默认为OFF

  • -DWITH_TCMALLOC=bool

    是否链接到-ltcmalloc.如果启用,内置malloc()、 calloc()realloc()free()例程将被禁用。默认为OFF.

    WITH_TCMALLOC并且 WITH_JEMALLOC是互斥的。

  • -DWITH_TEST_TRACE_PLUGIN=bool

    是否构建测试协议跟踪客户端插件(请参阅 使用测试协议跟踪插件)。默认情况下,此选项处于禁用状态。除非WITH_CLIENT_PROTOCOL_TRACING 启用该选项,否则启用该选项不会产生任何效果 。如果 MySQL 配置为启用这两个选项,则libmysqlclient客户端库将使用内置的测试协议跟踪插件构建,并且所有标准 MySQL 客户端都会加载该插件。然而,即使启用了测试插件,默认情况下也没有效果。使用环境变量可以控制插件;请参阅 使用测试协议跟踪插件

    笔记

    如果您想使用自己的协议跟踪插件,请不要启用该 WITH_TEST_TRACE_PLUGIN 选项,因为一次只能加载一个此类插件,并且尝试加载第二个插件时会发生错误。如果您已经构建了 MySQL,并启用了测试协议跟踪插件以查看其工作原理,则必须在不使用它的情况下重建 MySQL,然后才能使用自己的插件。

    有关编写跟踪插件的信息,请参阅 编写协议跟踪插件

  • -DWITH_TSAN=bool

    是否启用 ThreadSanitizer(对于支持它的编译器)。默认关闭。

  • -DWITH_UBSAN=bool

    是否为支持未定义行为清理程序的编译器启用它。默认关闭。

  • -DWITH_UNIT_TESTS={ON|OFF}

    如果启用,则使用单元测试编译 MySQL。默认值是 ON除非服务器没有被编译。

  • -DWITH_UNIXODBC=1

    为 Connector/ODBC 启用 unixODBC 支持。

  • -DWITH_VALGRIND=bool

    是否在 Valgrind 头文件中进行编译,这会将 Valgrind API 公开给 MySQL 代码。默认为 OFF.

    要生成 Valgrind 感知的调试版本, -DWITH_VALGRIND=1通常与-DWITH_DEBUG=1.请参阅 构建调试配置

  • -DWITH_ZLIB=zlib_type

    某些功能要求服务器构建有压缩库支持,例如 COMPRESS()和 UNCOMPRESS()函数以及客户端/服务器协议的压缩。该 WITH_ZLIB选项指示支持来源zlib

    最低支持版本zlib是 1.2.13。

    • bundled:使用 zlib与发行版捆绑在一起的库。这是默认设置。

    • system:使用系统 zlib库。如果 WITH_ZLIB设置为此值,则不会构建zlib_decompress实用程序。在这种情况下,可以使用 系统openssl zlib命令来代替。

  • -DWITH_ZSTD=zstd_type

    使用该算法的连接压缩zstd (请参见 第 6.2.8 节“连接压缩控制”)要求服务器构建有zstd 库支持。该WITH_ZSTD 选项指示支持来源zstd :

    • bundled:使用 zstd与发行版捆绑在一起的库。这是默认设置。

    • system:使用系统 zstd库。

编译器标志

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

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

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

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

如果设置影响优化的标志 ( ),则必须设置 和/或 选项,其中对应于值。要为默认构建类型 ( ) 指定不同的优化,请设置 和 选项。例如,要在 Linux 上使用调试符号进行编译,请执行以下操作: -OnumberCMAKE_C_FLAGS_build_typeCMAKE_CXX_FLAGS_build_typebuild_typeCMAKE_BUILD_TYPERelWithDebInfoCMAKE_C_FLAGS_RELWITHDEBINFOCMAKE_CXX_FLAGS_RELWITHDEBINFO-O3

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

用于编译 NDB Cluster 的 CMake 选项

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