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/data
The
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_LAYOUT
CMake选项的值;请参阅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_name
file_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-scope
Clang 标志,以检测使用-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=
选项,其中N
N
是一个大于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_type
RapidJSON 库支持的类型。
rapidjson_type
可以是以下值之一:-
bundled
: 使用 RapidJSON 库捆绑在发行版中。这是默认值。 -
system
: 使用系统 RapidJSON 库。版本 1.1.0 或更高版本是必要的。
-
-
是否构建 MySQL Router。默认情况下是
ON
。 -
-DWITH_SSL={
|ssl_type
path_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_FLAGS
CMake 选项。
在提供自己的编译器标志时,您可能想要指定CMAKE_BUILD_TYPE
。
例如,要创建 32 位的发布构建在 64 位 Linux 机器上,做法如下:
$> mkdir build
$> cd build
$> cmake .. -DCMAKE_C_FLAGS=-m32 \
-DCMAKE_CXX_FLAGS=-m32 \
-DCMAKE_BUILD_TYPE=RelWithDebInfo
如果您设置了影响优化的标志(-O
),您必须设置number
CMAKE_C_FLAGS_
和/or build_type
CMAKE_CXX_FLAGS_
选项,其中build_type
build_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
。