2.8.7 MySQL 源代码配置选项
CMake 程序提供了对 MySQL 源代码配置的控制。通常,您使用 CMake 命令行选项来配置。关于 CMake 支持的选项,运行以下命令在顶级源目录中:
$> cmake . -LH
$> ccmake .
您也可以使用某些环境变量来影响 CMake。见第6.9节,“环境变量”。
对于布尔选项,值可以指定为 1 或 ON 来启用选项,或者为 0 或 OFF 来禁用选项。
许多选项配置编译时的默认值,可以在服务器启动时覆盖。例如,CMAKE_INSTALL_PREFIX、MYSQL_TCP_PORT 和 MYSQL_UNIX_ADDR 选项可以在服务器启动时使用 --basedir、--port 和 --socket 选项来更改 mysqld 的启动选项。
以下部分提供了关于 CMake 选项的更多信息。
以下表格显示了可用的CMake选项。在Default列中,PREFIX表示CMAKE_INSTALL_PREFIX选项的值,该选项指定了安装基础目录。该值将用于多个安装子目录的父目录。
表2.13 MySQL源配置选项参考(CMake)
| Formats | Description | Default |
|---|---|---|
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 |
压缩debug部分的可执行文件 | OFF |
CPACK_MONOLITHIC_INSTALL |
是否生成单个文件 | OFF |
DEFAULT_CHARSET |
默认服务器字符集 | utf8mb4 |
DEFAULT_COLLATION |
默认服务器排序规则 | utf8mb4_0900_ai_ci |
DISABLE_PSI_COND |
排除性能Schema条件instrumentation | OFF |
DISABLE_PSI_DATA_LOCK |
排除性能Schema数据锁定instrumentation | OFF |
DISABLE_PSI_ERROR |
排除性能Schema服务器错误instrumentation | OFF |
DISABLE_PSI_FILE |
排除性能Schema文件instrumentation | OFF |
DISABLE_PSI_IDLE |
排除性能Schema空闲instrumentation | OFF |
DISABLE_PSI_MEMORY |
排除性能Schema内存instrumentation | OFF |
DISABLE_PSI_METADATA |
排除性能Schema元数据instrumentation | OFF |
DISABLE_PSI_MUTEX |
排除性能Schema互斥锁instrumentation | OFF |
DISABLE_PSI_PS |
排除性能Schema预准备statement | OFF |
DISABLE_PSI_RWLOCK |
排除性能Schemarwlockinstrumentation | OFF |
DISABLE_PSI_SOCKET |
排除性能Socketsinstrumentation | OFF |
DISABLE_PSI_SP |
排除性能Schema存储程序instrumentation | OFF |
DISABLE_PSI_STAGE |
排除性能Schemastageinstrumentation | OFF |
DISABLE_PSI_STATEMENT |
排除性能Schemastatementinstrumentation | OFF |
DISABLE_PSI_STATEMENT_DIGEST |
排除性能Schemastatements_digestinstrumentation | OFF |
DISABLE_PSI_TABLE |
排除性能Schema表instrumentation | OFF |
DISABLE_PSI_THREAD |
排除性能Schema线程instrumentation | OFF |
DISABLE_PSI_TRANSACTION |
排除性能 Schema 交易 Instrumentation | OFF |
ENABLED_LOCAL_INFILE |
是否启用 LOAD DATA 的 LOCAL | OFF |
ENABLED_PROFILING |
是否启用查询 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 |
是否生成 profile guided 优化数据 | OFF |
FPROFILE_USE |
是否使用 profile guided 优化数据 | OFF |
HAVE_PSI_MEMORY_INTERFACE |
启用性能 Schema 内存跟踪模块,以跟踪动态存储中的超出对齐类型的内存分配函数 | OFF |
IGNORE_AIO_CHECK |
在 -DBUILD_CONFIG=mysql_release 中忽略 libaio 检查 | OFF |
INSTALL_BINDIR |
用户可执行文件目录 | PREFIX/bin |
INSTALL_DOCDIR |
文档目录 | PREFIX/docs |
INSTALL_DOCREADMEDIR |
README 文件目录 | PREFIX |
INSTALL_INCLUDEDIR |
头文件目录 | PREFIX/include |
INSTALL_INFODIR |
Info 文件目录 | PREFIX/docs |
INSTALL_LAYOUT |
选择预定义的安装布局 | STANDALONE |
INSTALL_LIBDIR |
库文件目录 | PREFIX/lib |
INSTALL_MANDIR |
手册页目录 | PREFIX/man |
INSTALL_MYSQLSHAREDIR |
共享数据目录 | PREFIX/share |
INSTALL_MYSQLTESTDIR |
mysql-test 目录 | 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 默认值 | 平台相关 |
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 |
是否优化sanitizer构建 | ON |
REPRODUCIBLE_BUILD |
创建独立于构建位置和时间的build结果 | |
SHOW_SUPPRESSED_COMPILER_WARNING |
是否显示隐藏的编译器警告 | OFF |
SYSCONFDIR |
选项文件目录 | |
SYSTEMD_PID_DIR |
systemd下PID文件目录 | /var/run/mysqld |
SYSTEMD_SERVICE_NAME |
MySQL服务名称 | mysqld |
TMPDIR |
tmpdir默认值 | |
WIN_DEBUG_NO_INLINE |
是否禁用函数内联 | OFF |
WITHOUT_SERVER |
不构建服务器 | OFF |
WITHOUT_xxx_STORAGE_ENGINE |
排除存储引擎xxx | |
WITH_ANT |
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系统上生成唯一的build ID | ON |
WITH_CLASSPATH |
Classpath | |
WITH_CLIENT_PROTOCOL_TRACING |
构建客户端协议跟踪框架 | ON |
WITH_CURL |
curl库位置 | |
WITH_DEBUG |
是否包括调试支持 | OFF |
WITH_DEFAULT_COMPILER_OPTIONS |
是否使用默认编译器选项 | ON |
WITH_DEVELOPER_ENTITLEMENTS |
在macOS上添加'get-task-allow'特权以生成core dump | OFF |
WITH_EDITLINE |
libedit/editline库类型 | bundled |
WITH_ERROR_INSERT |
启用NDB存储引擎错误注入。不要在生产环境中使用。 | OFF |
WITH_ICU |
ICU支持类型 | bundled |
WITH_INNODB_EXTRA_DEBUG |
是否包括InnoDB额外调试支持 | OFF |
WITH_JEMALLOC |
是否链接到-jemalloc | OFF |
WITH_LD |
是否使用LLVM lld或mold链接器 | |
WITH_LIBEVENT |
哪种libevent库 | bundled |
WITH_LIBWRAP |
是否包括libwrap(TCP包装)支持 | OFF |
WITH_LOCK_ORDER |
是否启用LOCK_ORDER工具 | OFF |
WITH_LSAN |
是否运行LeakSanitizer,without 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 |
是否链接到-jemalloc | 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 静态编译到服务器 |
-
该选项将源分布配置为与 Oracle 使用的相同的构建选项,以生产官方 MySQL 发行版的二进制分布。
-
在 Linux 系统上,生成唯一的构建 ID,用于
build_id系统变量的值,并在 MySQL 服务器启动时将其写入日志。将该选项设置为OFF以禁用该功能。该选项对其他平台无效。
-
-DBUNDLE_RUNTIME_LIBRARIES=bool是否将 runtime 库与 Windows MSI 和 Zip 包装一起编译。
-
生成的构建类型:
-
RelWithDebInfo:启用优化并生成调试信息。这是 MySQL 默认的构建类型。 -
Release:启用优化,但省略调试信息以减少构建大小。 -
Debug:禁用优化并生成调试信息。这构建类型也用于在WITH_DEBUG选项启用时。即-DWITH_DEBUG=1等同于-DCMAKE_BUILD_TYPE=Debug。
选项值
None和MinSizeRel不受支持。 -
-
-DCPACK_MONOLITHIC_INSTALL=bool这选项影响了make package操作是否生成多个安装包文件或单个文件。如果禁用,这个操作将生成多个安装包文件,这可能有助于安装 MySQL 的子集。如果启用,它将生成单个文件用于安装所有内容。
-
强制在源文件夹中进行编译。出处编译是推荐的,因为它允许从同一个源文件夹中进行多次编译,并且可以快速清理build目录。要强制在源文件夹中编译,请使用CMake命令并指定
-DFORCE_INSOURCE_BUILD=ON。 -
控制编译器在命令行上是否启用颜色输出,适用于gcc和clang。默认情况下设置为
OFF。
CMAKE_INSTALL_PREFIX选项指定了基本安装目录。以INSTALL_开头的选项,用于指定组件位置,这些选项将相对于prefix的相对路径。它们的值不应该包含prefix。
-
-DCMAKE_INSTALL_PREFIX=dir_name基本安装目录。
可以在服务器启动时使用
--basedir选项设置该值。 -
安装用户程序的位置。
-
安装文档的位置。
-
-DINSTALL_DOCREADMEDIR=dir_name安装README文件的位置。
-
安装头文件的位置。
-
安装Info文件的位置。
-
选择预定义的安装布局:
-
STANDALONE: 与.tar.gz和.zip包的布局相同。这是默认值。 -
RPM: 类似于RPM包的布局。 -
SVR4: Solaris包的布局。 -
DEB: DEB包布局(实验性)。
您可以选择预定义的布局,但修改单个组件安装位置通过指定其他选项。例如:
cmake . -DINSTALL_LAYOUT=SVR4 -DMYSQL_DATADIR=/var/mysql/dataThe
INSTALL_LAYOUT值确定了secure_file_priv系统变量的默认值。请参阅第7.1.8节,“Server System Variables”中的描述。 -
-
安装库文件的位置。
-
安装手册页的位置。
-
-DINSTALL_MYSQLSHAREDIR=dir_name安装共享数据文件的位置。
-
-DINSTALL_MYSQLTESTDIR=dir_name安装
mysql-test目录的位置。要抑制安装该目录,请将选项设置为空值(-DINSTALL_MYSQLTESTDIR=)。 -
-DINSTALL_PKGCONFIGDIR=dir_name安装
mysqlclient.pc文件的目录,以供pkg-config使用。默认值为INSTALL_LIBDIR/pkgconfig,除非INSTALL_LIBDIR以/mysql结尾,在这种情况下将其去除。 -
存储插件目录的位置。
可以在服务器启动时使用
--plugin_dir选项设置该值。 -
-DINSTALL_PRIV_LIBDIR=dir_name动态库目录的位置。
默认位置。 对于RPM安装,这是
/usr/lib64/mysql/private/,对于DEB安装是/usr/lib/mysql/private/,对于TAR安装是lib/private/。Protobuf。 由于这是一个私有位置,加载器(如Linux上的
ld-linux.so)可能无法找到libprotobuf.so文件。为了帮助加载器,RPATH=$ORIGIN/../$INSTALL_PRIV_LIBDIR被添加到mysqld和mysqlxtest中。这对大多数情况有效,但是在使用资源组特性的情况下,mysqld将被设置为setsuid,加载器将忽略任何包含$ORIGIN的RPATH。为了解决这个问题,在DEB和RPM版本的mysqld中设置了明确的完整路径。对于tarball安装,需要使用工具如patchelf来patchmysqld。 -
将mysqld服务器安装到的位置。
-
-DINSTALL_SECURE_FILE_PRIVDIR=dir_name默认的
secure_file_priv系统变量的默认值。默认值是平台相关的,取决于INSTALL_LAYOUTCMake选项的值;请参阅secure_file_priv系统变量的描述在第7.1.8节,“Server System Variables”。 -
安装aclocal/mysql.m4的位置。
-
-DINSTALL_STATIC_LIBRARIES=bool是否安装静态库文件。默认值为
ON。如果设置为OFF,这些库文件将不被安装:libmysqlclient.a,libmysqlservices.a。 -
-DINSTALL_SUPPORTFILESDIR=dir_name安装额外支持文件的位置。
-
是否随机化mysqld二进制文件中的符号顺序。默认值为
OFF。这项选项仅供调试用途。 -
随机化符号顺序的种子值。该值是一个字符串。默认值为
mysql,一个随机选择。 -
MySQL数据目录的位置。
可以在服务器启动时使用
--datadir选项设置该值。 -
ODBC包含目录的位置,这可能会在配置Connector/ODBC时使用。
-
ODBC库目录的位置,这可能在配置Connector/ODBC时使用。
-
默认的
my.cnf选项文件目录。不能在服务器启动时设置此选项,但可以使用
--defaults-file=选项启动服务器,其中file_namefile_name是文件的完整路径名。 -
当MySQL由systemd管理时,PID文件的目录名称。默认为
/var/run/mysqld,可能根据INSTALL_LAYOUT值隐式更改。除非
WITH_SYSTEMD启用,这选项将被忽略。 -
当MySQL由systemd管理时,MySQL服务的名称。默认为
mysqld,可能根据INSTALL_LAYOUT值隐式更改。除非
WITH_SYSTEMD启用,这选项将被忽略。 -
tmpdir系统变量的默认位置。如果未指定,值将默认为
P_tmpdir在<stdio.h>中。
存储引擎是插件。您可以将插件编译为静态模块(编译到服务器中)或动态模块(编译为动态库,然后使用INSTALL PLUGIN语句或--plugin-load选项在服务器中安装)才能使用。某些插件可能不支持静态或动态编译。
InnoDB、MyISAM、MERGE、MEMORY和CSV引擎是强制性的(总是编译到服务器中),无需显式安装。
要将存储引擎静态编译到服务器中,使用-DWITH_。一些可允许的engine_STORAGE_ENGINE=1engine值是ARCHIVE、BLACKHOLE、EXAMPLE和FEDERATED。示例:
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
要在MySQL中支持NDB集群,使用WITH_NDB选项。
不可能编译不包含性能Schema支持。如果想要编译不包含特定的类型的instrumentation,可以使用以下CMake选项:
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
例如,要编译不包含互斥锁instrumentation,使用-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
-
这个选项确定是否生成可加载到调试器中的.bin文件的.gdb_index部分。该选项默认禁用。使用lld链接器时禁用该选项。如果使用其他链接器,例如gold,该选项无效。
-
关于编译环境的描述。虽然mysqld 使用
COMPILATION_COMMENT_SERVER,其他程序使用COMPILATION_COMMENT。 -
-DCOMPRESS_DEBUG_SECTIONS=bool是否压缩二进制可执行文件的调试部分(Linux-only)。压缩可执行文件的调试部分可以节省空间,但是在构建过程中需要更多的CPU时间。
默认情况下,
OFF。如果没有明确设置该选项,但是在环境变量COMPRESS_DEBUG_SECTIONS中设置了该选项,该选项将从该变量中获取值。 -
-DCOMPILATION_COMMENT_SERVER=string关于编译环境的描述,用于mysqld的使用(例如,设置
version_comment系统变量)。其他程序使用COMPILATION_COMMENT。 -
-DDEFAULT_CHARSET=charset_name服务器字符集。默认情况下,MySQL 使用
utf8mb4字符集。字符集名称可以是binary,armscii8,ascii,big5,cp1250,cp1251,cp1256,cp1257,cp850,cp852,cp866,cp932,dec8,eucjpms,euckr,gb2312,gbk,geostd8,greek,hebrew,hp8,keybcs2,koi8r,koi8u,latin1,latin2,latin5,latin7,macce,macroman,sjis,swe7,tis620,ucs2,ujis,utf8mb3,utf8mb4,utf16,utf16le,utf32.这个值可以在服务器启动时使用
--character-set-server选项设置。 -
服务器排序规则。默认情况下,MySQL 使用
utf8mb4_0900_ai_ci。使用SHOW COLLATION语句来确定每个字符集可用的排序规则。这个值可以在服务器启动时使用
--collation_server选项设置。 -
是否排除性能_schema 条件instrumentation。默认情况下是
OFF(包括). -
是否排除性能_schema 文件instrumentation。默认情况下是
OFF(包括). -
是否排除性能_schema 空闲instrumentation。默认情况下是
OFF(包括). -
是否排除性能Schema内存instrumentation。默认是
OFF(包括)。 -
是否排除性能Schema元数据instrumentation。默认是
OFF(包括)。 -
是否排除性能Schema锁定instrumentation。默认是
OFF(包括)。 -
是否排除性能Schema读写锁定instrumentation。默认是
OFF(包括)。 -
是否排除性能Schema socket instrumention。默认是
OFF(包括)。 -
是否排除性能Schema存储程序instrumentation。默认是
OFF(包括)。 -
是否排除性能Schema阶段instrumentation。默认是
OFF(包括)。 -
是否排除性能Schema语句instrumentation。默认是
OFF(包括)。 -
-DDISABLE_PSI_STATEMENT_DIGEST=bool是否排除性能Schema语句摘要instrumentation。默认是
OFF(包括)。 -
是否排除性能Schema表instrumentation。默认是
OFF(包括)。 -
排除性能Schema预编译语句实例instrumentation。默认是
OFF(包括)。 -
排除性能Schema线程instrumentation。默认是
OFF(包括)。只有在没有任何instrumentation时禁用线程,因为其他instrumentation都依赖于线程。
-
-DDISABLE_PSI_TRANSACTION=bool排除性能Schema事务instrumentation。默认是
OFF(包括)。 -
排除性能Schema数据锁定instrumentation。默认是
OFF(包括)。 -
排除性能Schema服务器错误instrumentation。默认是
OFF(包括)。 -
-DENABLE_EXPERIMENTAL_SYSVARS=bool是否启用实验性
InnoDB系统变量。实验性系统变量旨为MySQL开发人员使用,仅在开发或测试环境中使用,并且可能在未来的MySQL版本中被删除。关于实验性系统变量,请参阅/storage/innobase/handler/ha_innodb.cc在MySQL源代码树中。实验性系统变量可以通过搜索“PLUGIN_VAR_EXPERIMENTAL”来识别。 -
是否构建MySQL Server。默认是OFF,表示不构建服务器。
这被认为是一个实验性选项;在构建时prefer to build with the server。
-
是否包括gcov支持(Linux only)。
-
是否启用gprof(优化的Linux构建only)。
-
该选项控制 MySQL 客户端库的编译时默认
LOCAL能力。没有明确设置的客户端默认情况下,LOCAL能力将根据在 MySQL 编译时指定的ENABLED_LOCAL_INFILE设置启用或禁用。默认情况下,MySQL 二进制分发的客户端库是编译时禁用了
ENABLED_LOCAL_INFILE。如果您从源代码编译 MySQL,configure 它时使用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 安全考虑”。 -
是否启用查询 profiling 代码(用于
SHOW PROFILE和SHOW PROFILES语句)。 -
-DFORCE_UNSUPPORTED_COMPILER=bool默认情况下,CMake 检查支持的编译器的最低版本;要禁用此检查,请使用
-DFORCE_UNSUPPORTED_COMPILER=ON。 -
-DSHOW_SUPPRESSED_COMPILER_WARNINGS=bool显示被抑制的编译器警告,并且在使用
-Werror时不失败。默认值为OFF。 -
是否生成 Profile Guided Optimization(PGO)数据。该选项适用于使用 GCC 进行 PGO 的实验。见
cmake/fprofile.cmake文件在 MySQL 源代码分发中,以了解使用FPROFILE_GENERATE和FPROFILE_USE的信息。这些选项已在 GCC 8 和 9 上进行了测试。 -
是否使用 Profile Guided Optimization(PGO)数据。该选项适用于使用 GCC 进行 PGO 的实验。见
cmake/fprofile.cmake文件在 MySQL 源代码分发中,以了解使用FPROFILE_GENERATE和FPROFILE_USE的信息。这些选项已在 GCC 8 和 9 上进行了测试。启用
FPROFILE_USE也启用WITH_LTO。 -
-DHAVE_PSI_MEMORY_INTERFACE=bool是否启用性能架构内存跟踪模块,对于内存分配函数(
ut::aligned_库函数)在动态存储中使用的动态存储类型。name -
如果在 Linux 上提供了
-DBUILD_CONFIG=mysql_release选项,需要默认链接libaio库。如果您没有libaio或不想安装它,可以通过指定-DIGNORE_AIO_CHECK=1来抑制对它的检查。 -
每个表的最大索引数。默认值为64。最大值为255。小于64的值将被忽略,使用默认的64。
-
是否启用 MySQL 维护者专用开发环境。如果启用,这个选项将编译器警告转换为错误。
-
-DWITH_DEVELOPER_ENTITLEMENTS=bool是否添加
get-task-allow特权到所有可执行文件,以便在意外服务器崩溃时生成核心转储。在 macOS 11 及更高版本上,核心转储受到
com.apple.security.get-task-allow特权的限制,这个 CMake 选项启用了特权。特权允许其他进程附加和读写进程内存,并使--core-file正常工作。 -
InnoDB 使用的锁类型。可选项包括:
-
event: 使用事件锁。这是默认值和原始 InnoDB 锁实现。 -
sys: 在 UNIX 系统上使用 POSIX 锁。在 Windows 上,如果可用,使用 CRITICAL_SECTION 对象。 -
futex: 在 Linux 上使用 futexes 替代条件变量来调度等待线程。
-
-
X 插件监听 TCP/IP 连接的端口号。默认值为 33060。
这个值可以在服务器启动时使用
mysqlx_port系统变量设置。 -
Unix 套接字文件路径,服务器监听 X 插件套接字连接的路径。这必须是一个绝对路径名。默认值为
/tmp/mysqlx.sock。这个值可以在服务器启动时使用
mysqlx_port系统变量设置。 -
对于 Windows 或 macOS,项目名称将被包含在项目文件名中。
-
服务器监听 TCP/IP 连接的端口号。默认值为 3306。
这个值可以在服务器启动时使用
--port选项设置。 -
Unix 套接字文件路径,服务器监听套接字连接的路径。这必须是一个绝对路径名。默认值为
/tmp/mysql.sock。这个值可以在服务器启动时使用
--socket选项设置。 -
是否支持优化器跟踪。请参阅 MySQL Internals: Tracing the Optimizer。
-
对于 Linux 系统,这个选项控制是否创建独立于构建位置和时间的构建结果。
这个选项的默认值为
ON,适用于RelWithDebInfo构建。 -
CMake 使用标准链接器。可选地,传入
lld或mold指定备用链接器。 mold 必须是版本 2 或更高版本。这个选项可以在 Linux 系统上使用,除了 Enterprise Linux,这些系统总是使用 ld 链接器。
Note之前,可以使用
USE_LD_LLD选项来启用(默认)或禁用明确地使用 LLVM lld 链接器。从 MySQL 8.3 开始,USE_LD_LLD已经被删除。 -
是否在 Windows 上禁用函数内联。默认情况下是
OFF(内联启用)。 -
设置 Ant 的路径,用于构建 GCS Java 包装器。将
WITH_ANT设置为目录的路径,其中包含 Ant 的 tarball 或解压缩存档。當WITH_ANT未设置或设置为特殊值system时,构建过程假设ant二进制文件存在于$PATH中。 -
是否启用 AddressSanitizer,支持的编译器。默认情况下是
OFF。 -
是否启用 AddressSanitizer
-fsanitize-address-use-after-scopeClang 标志,以检测使用-after-scope。默认情况下是关闭的。要使用这个选项,必须先启用WITH_ASAN。 -
-DWITH_AUTHENTICATION_CLIENT_PLUGINS=bool这个选项在构建时自动启用,如果对应的服务器身份验证插件被构建。它的值因此取决于其他 CMake 选项,并且不应该被设置为 true。
-
-DWITH_AUTHENTICATION_LDAP=bool是否报告 LDAP 身份验证插件无法构建的错误:
-
如果这个选项禁用(默认情况),LDAP 插件将在找到所需的头文件和库时被构建。如果找不到,CMake 将显示一个注意信息。
-
如果这个选项启用,找不到所需的头文件和库将导致 CMake 生成错误,防止服务器被构建。
-
-
-DWITH_AUTHENTICATION_PAM=bool是否在包含该插件的源树中构建PAM身份验证插件。 (见第8.4.1.5节,“PAM可插拔身份验证”。) 如果指定了该选项并且插件不能编译,构建将失败。
-
Amazon Web Services软件开发 kit的位置。
-
-DWITH_CLIENT_PROTOCOL_TRACING=bool是否将客户端协议跟踪框架编译到客户端库中。默认情况下,这个选项是启用的。
有关编写协议跟踪客户端插件的信息,请见编写协议跟踪插件。
-
curl库的位置。curl_type可以是system(使用系统curl库)、一个curl库的路径、no|off|none来禁用curl支持或bundled来使用extra/curl/中的bundled curl分发。 -
是否包括调试支持。
使用调试支持配置MySQL时,可以使用
--debug="d,parser_debug"选项启动服务器。这将使Bison解析器在处理SQL语句时将解析器跟踪写入到服务器的标准错误输出中。通常,这个输出将写入到错误日志中。InnoDB存储引擎的同步调试检查是定义在
UNIV_DEBUG下,并且在使用WITH_DEBUG选项编译调试支持时可用。当调试支持编译时,可以使用innodb_sync_debug配置选项来启用或禁用InnoDB同步调试检查。启用
WITH_DEBUG也启用了Debug Sync。这一功能用于测试和调试。当编译时启用时,Debug Sync默认在运行时禁用。要启用它,请使用mysqld命令,添加--debug-sync-timeout=选项,其中NN是一个大于0的超时值(默认值为0,禁用Debug Sync)。N将成为同步点的默认超时值。InnoDB存储引擎的同步调试功能可在使用
WITH_DEBUG选项编译时启用。有关Debug Sync功能和同步点使用的描述,请参阅MySQL Internals: Test Synchronization。
-
要使用的libedit/editline库。允许的值是
(默认)和 system。 -
-DWITH_ICU={icu_type|path_name}MySQL使用International Components for Unicode(ICU)来支持正则表达式操作。WITH_ICU选项指示ICU支持的类型或ICU安装的路径名。
-
icu_type可以是以下值之一:-
bundled: 使用与分布一起的ICU库。这是默认值,在Windows上是唯一支持的选项。 -
system: 使用系统ICU库。
-
-
path_name是要使用的ICU安装的路径名。这可以避免使用WITH_ICU的WITH_ICU值system,因为它可以防止CMake检测和使用系统中可能存在的错误或旧版本的ICU库。另一种方法是设置WITH_ICU到system,并将CMAKE_PREFIX_PATH选项设置为path_name。)
-
-
-DWITH_INNODB_EXTRA_DEBUG=bool是否包括额外的InnoDB调试支持。
启用
WITH_INNODB_EXTRA_DEBUG将启用InnoDB额外调试检查。这项选项只能在WITH_DEBUG启用时启用。 -
是否链接到
-ljemalloc。如果启用,内置的malloc()、calloc()、realloc()和free()函数将被禁用。默认情况下是OFF。 -
在Windows上,传递一个包含
jemalloc.dll的目录路径以启用jemalloc功能。构建系统将jemalloc.dll复制到mysqld.exe和/ormysqld-debug.exe的同一目录,并使用它来管理内存。使用标准内存函数如果找不到或jemalloc.dll不导出所需函数。INFO级别日志记录是否找到和使用jemalloc。这项选项在官方MySQL Windows binaries中启用。
-
要使用的
libevent库。允许的值是bundled(默认)和system。如果指定system,并且找不到系统libevent库,错误将发生,内置的libevent将不被使用。libevent库是X Plugin和MySQL Router所需的。 -
是否包括
libwrap(TCP wrappers)支持。 -
是否启用LOCK_ORDER工具。默认情况下,这项选项禁用,服务器构建中没有工具。如果启用工具,LOCK_ORDER工具将可用,可以按照第7.9.3节,“LOCK_ORDER工具”中的描述使用。
Note使用
WITH_LOCK_ORDER选项时,MySQL编译需要flex程序。 -
是否运行漏洞检测工具LeakSanitizer,不包括AddressSanitizer。默认情况下是
OFF。 -
是否启用链接时优化器,如果编译器支持。默认情况下是
OFF,除非启用FPROFILE_USE。 -
选项
WITH_LZ4指示zlib支持的来源:-
bundled:使用lz4库捆绑在分布中。这是默认情况。 -
system:使用系统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 Full-Text Parser Plugin”。
-
是否启用MemorySanitizer,适用于支持它的编译器。默认情况下是off。
如果启用了该选项,所有链接到MySQL的库也必须使用同样启用该选项编译。
-
是否启用Visual Studio CRT内存泄露跟踪。默认情况下是
OFF。 -
是否启用MSVC代码分析。默认情况下为
ON。 -
是否编译支持X插件。默认情况下为
ON。请参阅第22章, 使用 MySQL 作为文档存储。 -
明确设置NUMA内存分配策略。CMake根据当前平台是否支持NUMA来设置默认
WITH_NUMA值。对于不支持NUMA的平台,CMake将继续正常运行,生产以下警告:NUMA库缺失或所需版本不可用。-
使用
-DWITH_NUMA=ON,CMake将以以下错误终止:NUMA库缺失或所需版本不可用。
-
-
用于RPM和Debian包的标志是否添加到独立构建中。默认情况下为
ON,除非是调试构建。 -
使用哪种Protocol Buffers包。
protobuf_type可以是以下值之一:bundled: 使用与分布一起的包。这是默认值。可选地使用INSTALL_PRIV_LIBDIR来修改动态Protobuf库目录。-
system: 使用系统安装的包。 -
其他值将被忽略,fallback到
bundled。
-
-
是否构建快速开发周期插件。当启用时,在构建树中创建一个名为
rapid的目录;当禁用时,不创建该目录。默认情况下是ON,除非从源树中删除rapid目录,那么默认情况下是OFF。 -
-DWITH_RAPIDJSON=rapidjson_typeRapidJSON 库支持的类型。
rapidjson_type可以是以下值之一:-
bundled: 使用 RapidJSON 库捆绑在发行版中。这是默认值。 -
system: 使用系统 RapidJSON 库。版本 1.1.0 或更高版本是必要的。
-
-
是否构建 MySQL Router。默认情况下是
ON。 -
-DWITH_SSL={|ssl_typepath_name}为了支持加密连接、随机数生成和其他加密相关操作,MySQL 必须使用 SSL 库。这选项指定要使用的 SSL 库。
-
path_name是 OpenSSL 安装路径。使用该路径可以避免使用ssl_type值system,因为它可以防止 CMake 检测并使用系统中可能已安装的旧版本 OpenSSL。 (另一种方法是将WITH_SSL设置为system,并将CMAKE_PREFIX_PATH选项设置为path_name。)
有关 SSL 库配置的更多信息,请见第2.8.6节,“Configuring SSL Library Support”。
-
启用服务器中的
SHOW PARSE_TREE语句,用于开发和调试,但不用于生产环境。 -
是否启用 systemd 支持文件的安装。默认情况下,这个选项是禁用的。启用后,systemd 支持文件将被安装,且脚本如mysqld_safe 和 System V 初始化脚本将不被安装。在没有 systemd 可用的平台上启用
WITH_SYSTEMD将导致 CMake 的错误。在使用该选项构建服务器时,MySQL 将包括所有 systemd 消息在服务器的错误日志中(见第7.4.2节,“The Error Log”)。
有关使用 systemd 的更多信息,请见第2.5.9节,“Managing MySQL Server with systemd”。该节还包括了在
[mysqld_safe]选项组中指定选项的信息,因为 mysqld_safe 在使用 systemd 时不被安装,因此这些选项必须以其他方式指定。 -
这项选项作为一个“大棚”选项,用于设置任何以下CMake选项的
system值,如果这些选项没有被明确设置:WITH_CURL,WITH_EDITLINE,WITH_ICU,WITH_LIBEVENT,WITH_LZ4,WITH_LZMA,WITH_PROTOBUF,WITH_RE2,WITH_SSL,WITH_ZLIB,WITH_ZSTD。 -
是否生成systemd调试信息,以便在使用systemd运行 MySQL 的平台上。默认情况下是
OFF。 -
是否链接
-ltcmalloc。如果启用,内置的malloc(),calloc(),realloc()和free()函数将被禁用。默认情况下是OFF。 -
是否构建测试协议跟踪客户端插件(见使用测试协议跟踪插件)。默认情况下,这个选项是禁用的。启用这个选项没有任何效果,除非启用了
WITH_CLIENT_PROTOCOL_TRACING选项。如果 MySQL 配置了两个选项都启用了,libmysqlclient客户端库将包含测试协议跟踪插件,并且所有标准 MySQL 客户端将加载插件。然而,即使启用了测试插件,它默认情况下没有任何效果。插件的控制是通过环境变量实现的;见使用测试协议跟踪插件。Note不要启用
WITH_TEST_TRACE_PLUGIN选项,如果您想使用自己的协议跟踪插件,因为只能加载一个插件一次。如果您已经使用测试协议跟踪插件构建了 MySQL,以便了解它的工作方式,您必须重新编译 MySQL以便使用自己的插件。关于编写跟踪插件的信息,请见编写协议跟踪插件。
-
是否启用 ThreadSanitizer,支持的编译器。默认情况下是关闭的。
-
是否启用 Undefined Behavior Sanitizer,支持的编译器。默认情况下是关闭的。
-
如果启用,编译 MySQL 的单元测试。默认情况下是
ON,除非服务器不在编译中。 -
启用 unixODBC 支持,为 Connector/ODBC。
-
是否编译 Valgrind 头文件,暴露 Valgrind API 到 MySQL 代码中。默认情况下是
OFF。为了生成Valgrind-aware debug build,通常需要将
-DWITH_VALGRIND=1与-DWITH_DEBUG=1组合起来。详见Building Debug Configurations. -
一些功能需要服务器在编译时支持压缩库,例如
COMPRESS()和UNCOMPRESS()函数,以及客户端/服务器协议的压缩。WITH_ZLIB选项指示了zlib支持的来源:最低支持的
zlib版本是1.2.13。-
bundled: 使用与分布一起提供的zlib库。这是默认选项。 -
system: 使用系统zlib库。
-
-
使用Section 6.2.8, “Connection Compression Control”中的zstd算法进行连接压缩(见Section 6.2.8, “Connection Compression Control”)需要服务器在编译时支持zstd库。
WITH_ZSTD选项指示了zstd支持的来源:
-
C编译器的标志。
-
C++编译器的标志。
-
-DWITH_DEFAULT_COMPILER_OPTIONS=bool是否使用
cmake/build_configurations/compiler_options.cmake中的标志。NoteMySQL 建立团队精心选择和测试了所有优化标志。覆盖它们可能会导致意外结果,并且是您自己承担的风险。
-
-DOPTIMIZE_SANITIZER_BUILDS=bool是否将
-O1 -fno-inline添加到 sanitizer 构建中。默认情况下是ON。
要指定自己的 C 和 C++ 编译器标志,使用CMAKE_C_FLAGS和CMAKE_CXX_FLAGSCMake 选项。
在提供自己的编译器标志时,您可能想要指定CMAKE_BUILD_TYPE。
例如,要创建 32 位的发布构建在 64 位 Linux 机器上,做法如下:
$> mkdir build
$> cd build
$> cmake .. -DCMAKE_C_FLAGS=-m32 \
-DCMAKE_CXX_FLAGS=-m32 \
-DCMAKE_BUILD_TYPE=RelWithDebInfo
如果您设置了影响优化的标志(-O),您必须设置numberCMAKE_C_FLAGS_和/or build_typeCMAKE_CXX_FLAGS_选项,其中build_typebuild_type对应于CMAKE_BUILD_TYPE值。要指定默认构建类型(RelWithDebInfo)的优化,设置CMAKE_C_FLAGS_RELWITHDEBINFO和CMAKE_CXX_FLAGS_RELWITHDEBINFO选项。例如,要在 Linux 上编译-O3和带有调试符号,做法如下:
$> cmake .. -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O3 -g" \
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O3 -g"
以下选项用于在 MySQL 源代码中使用 NDB 集群支持时。
-
-DNDB_UTILS_LINK_DYNAMIC={ON|OFF}控制 NDB 工具,如ndb_drop_table是否静态链接到
ndbclient(OFF)或动态链接 (ON);OFF(静态链接)是默认值。通常情况下,静态链接用于避免LD_LIBRARY_PATH问题,或者在多个版本的ndbclient安装时。这选项旨在创建 Docker 映像和其他可能的情况,在目标环境中具有精确控制,并且希望减少映像大小。 -
设置Java MySQL NDB Cluster Connector的classpath。默认为空。这项选项将被忽略,如果使用
-DWITH_NDB_JAVA=OFF。 -
在
NDB内核中启用错误注入。仅供测试使用,不适用于生产环境的binaries。默认为OFF。 -
构建MySQL NDB Cluster;构建NDB插件和所有NDB Cluster程序。
-
-DWITH_NDBAPI_EXAMPLES={ON|OFF}在
storage/ndb/ndbapi-examples/中构建NDB API示例程序。请参阅NDB API Examples,了解这些示例的信息。 -
-DWITH_NDBCLUSTER_STORAGE_ENGINE={ON|OFF}控制是否包括
ndbcluster插件在构建中;WITH_NDB启用此选项自动,因此建议使用WITH_NDB。 -
这项选项已弃用,可能会被删除;使用
WITH_NDB代替。 -
构建多线程数据节点可执行文件ndbmtd。默认为
ON。 -
启用NDB Cluster binaries的调试版本。这默认为
OFF。 -
启用使用 Java 支持的 NDB 集群构建,包括 ClusterJ 支持(请参见MySQL NDB 集群连接器 for Java)。
这个选项默认情况下是
ON。如果您不想编译 NDB 集群时使用 Java 支持,您必须在运行CMake时明确禁用它,指定-DWITH_NDB_JAVA=OFF。否则,如果 Java 无法找到,配置构建将失败。 -
使得构建的 NDB 集群管理服务器(ndb_mgmd) 使用这个
port。如果这个选项未设置,结果的管理服务器将默认使用端口 1186。 -
如果启用,包括 NDB API 测试程序的一组。默认情况下是
OFF。 -
-DWITH_NDB_TLS_SEARCH_PATH=path设置ndb_sign_keys和其他
NDB程序的默认搜索路径,以便于 TLS 证书和密钥文件。Windows 平台的默认值是
$HOMEDIR/ndb-tls;对于其他平台,如 Linux,它是$HOME/ndb-tls。