2.9.7 MySQL 源配置选项

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

cmake . -LH
ccmake .

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

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

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

以下各节提供有关 CMake 选项的更多信息。

CMake 选项参考

下 table 显示了可用的 CMake 选项。在Default列中,PREFIXtable 示CMAKE_INSTALL_PREFIX选项的值,该选项指定安装基础目录。此值用作几个安装子目录的父位置。

table2.13 MySQL 源配置选项参考(CMake)

FormatsDescriptionDefaultIntroduced
BUILD_CONFIG使用与正式版本相同的构建选项
CMAKE_BUILD_TYPE要生产的构建类型RelWithDebInfo
CMAKE_CXX_FLAGSC 编译器的标志
CMAKE_C_FLAGSC 编译器的标志
CMAKE_INSTALL_PREFIX安装基础目录/usr/local/mysql
COMPILATION_COMMENT关于编译环境的 Comment
CPACK_MONOLITHIC_INSTALL软件包构建是否生成单个文件OFF
DEFAULT_CHARSET默认服务器字符集latin1
DEFAULT_COLLATION默认服务器排序规则latin1_swedish_ci
DISABLE_PSI_COND排除性能模式条件检测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排除性能模式阶段检测OFF
DISABLE_PSI_STATEMENT排除性能模式语句检测OFF
DISABLE_PSI_STATEMENT_DIGEST排除性能模式语句摘要工具OFF
DISABLE_PSI_TABLE排除性能模式 table 检测OFF
DISABLE_PSI_THREAD排除性能架构线程检测OFF
DISABLE_PSI_TRANSACTION排除性能架构事务检测OFF
DOWNLOAD_BOOST是否下载 Boost 库OFF
DOWNLOAD_BOOST_TIMEOUT下载 Boost 库的超时时间(以秒为单位)600
ENABLED_LOCAL_INFILE是否为加载数据启用本地OFF
ENABLED_PROFILING是否启用查询分析代码ON
ENABLE_DOWNLOADS是否下载可选文件OFF
ENABLE_DTRACE是否包括 DTrace 支持
ENABLE_GCOV是否包括 gcov 支持
ENABLE_GPROF启用 gprof(仅限优化的 Linux 构建)OFF
FORCE_UNSUPPORTED_COMPILER是否允许不支持的编译器OFF
IGNORE_AIO_CHECK使用-DBUILD_CONFIG = mysql_release 时,忽略 libaio 检查OFF
INSTALL_BINDIR用户可执行文件目录PREFIX/bin
INSTALL_DOCDIRDocumentation directoryPREFIX/docs
INSTALL_DOCREADMEDIR自述文件目录PREFIX
INSTALL_INCLUDEDIR头文件目录PREFIX/include
INSTALL_INFODIR信息文件目录PREFIX/docs
INSTALL_LAYOUT选择 sched 义的安装布局STANDALONE
INSTALL_LIBDIR库文件目录PREFIX/lib
INSTALL_MANDIR手册页目录PREFIX/man
INSTALL_MYSQLKEYRINGDIRkeyring_file 插件数据文件的目录platform specific5.7.11
INSTALL_MYSQLSHAREDIR共享数据目录PREFIX/share
INSTALL_MYSQLTESTDIRmysql-test directoryPREFIX/mysql-test
INSTALL_PKGCONFIGDIRmysqlclient.pc pkg-config 文件的目录INSTALL_LIBDIR/pkgconfig
INSTALL_PLUGINDIRPlugin directoryPREFIX/lib/plugin
INSTALL_SBINDIR服务器可执行目录PREFIX/bin
INSTALL_SCRIPTDIRScripts directoryPREFIX/scripts
INSTALL_SECURE_FILE_PRIVDIRsecure_file_priv 默认值platform specific
INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIRsecure_file_priv libmysqld 的默认值
INSTALL_SHAREDIRaclocal/mysql.m4 安装目录PREFIX/share
INSTALL_SUPPORTFILESDIR额外的支持文件目录PREFIX/support-files
MAX_INDEXES每张 table 的最大索引64
MUTEX_TYPEInnoDB 互斥锁类型event
MYSQLX_TCP_PORTX 插件使用的 TCP/IP 端口号330605.7.17
MYSQLX_UNIX_ADDRX 插件使用的 Unix 套接字文件/tmp/mysqlx.sock5.7.15
MYSQL_DATADIRData directory
MYSQL_MAINTAINER_MODE是否启用特定于 MySQL 维护人员的开发环境OFF
MYSQL_PROJECT_NAMEWindows/OS X 项目名称MySQL
MYSQL_TCP_PORTTCP/IP 端口号3306
MYSQL_UNIX_ADDRUnix 套接字文件/tmp/mysql.sock
ODBC_INCLUDESODBC 包含目录
ODBC_LIB_DIRODBC 库目录
OPTIMIZER_TRACE是否支持优化器跟踪
REPRODUCIBLE_BUILD格外小心,以独立于构建位置和时间来创建构建结果5.7.19
SUNPRO_CXX_LIBRARYSolaris 10 上的 Client 端链接库
SYSCONFDIR选项文件目录
SYSTEMD_PID_DIRsystemd 下 PID 文件的目录/var/run/mysqld
SYSTEMD_SERVICE_NAMEsystemd 下的 MySQL 服务名称mysqld
TMPDIRtmpdir 默认值
WIN_DEBUG_NO_INLINE是否禁用功能内联OFF
WITHOUT_xxx_STORAGE_ENGINE从构建中排除存储引擎 xxx
WITH_ASANEnable AddressSanitizerOFF
WITH_ASAN_SCOPE启用 AddressSanitizer -fsanitize-scope-use-scope 范围 Clang 标志OFF5.7.21
WITH_AUTHENTICATION_LDAP如果无法构建 LDAP 认证插件,是否报告错误OFF5.7.19
WITH_AUTHENTICATION_PAM构建 PAM 身份验证插件OFF
WITH_AWS_SDKAmazon Web Services 软件开发套件的位置5.7.19
WITH_BOOSTBoost 库源代码的位置
WITH_CLIENT_PROTOCOL_TRACING构建 Client 端协议跟踪框架ON
WITH_CURLcurl 库的位置5.7.19
WITH_DEBUG是否包括调试支持OFF
WITH_DEFAULT_COMPILER_OPTIONS是否使用默认的编译器选项ON
WITH_DEFAULT_FEATURE_SET是否使用默认功能集ON
WITH_EDITLINE使用哪个 libedit/editline 库bundled
WITH_EMBEDDED_SERVER是否构建嵌入式服务器OFF
WITH_EMBEDDED_SHARED_LIBRARY是否构建共享的嵌入式服务器库OFF
WITH_EXTRA_CHARSETS包括哪些额外的字符集all
WITH_GMOCKgooglemock 分发路径
WITH_INNODB_EXTRA_DEBUG是否包括对 InnoDB 的额外调试支持。OFF
WITH_INNODB_MEMCACHED是否生成 memcached 共享库。OFF
WITH_KEYRING_TEST构建密钥环测试程序OFF5.7.11
WITH_LDAP仅供内部使用5.7.29
WITH_LIBEVENT使用哪个 libevent 库bundled
WITH_LIBWRAP是否包括 libwrap(TCP 包装器)支持OFF
WITH_LZ4LZ4 库支持的类型bundled5.7.14
WITH_MECABCompiles MeCab
WITH_MSANEnable MemorySanitizerOFF
WITH_MSCRT_DEBUG启用 Visual Studio CRT 内存泄漏跟踪OFF
WITH_NDBCLUSTER构建 NDB 存储引擎; WITH_NDBCLUSTER_STORAGE_ENGINE 的别名ON
WITH_NDBCLUSTER_STORAGE_ENGINE构建 NDB 存储引擎ON
WITH_NDB_TEST包括 NDB API 测试程序。OFF
WITH_NUMA设置 NUMA 内存分配策略5.7.17
WITH_PROTOBUF使用哪个协议缓冲区包bundled5.7.12
WITH_RAPID是否构建快速开发周期插件ON5.7.12
WITH_SASL仅供内部使用5.7.29
WITH_SSLSSL 支持类型system
WITH_SYSTEMD启用系统支持文件的安装OFF
WITH_TEST_TRACE_PLUGIN构建测试协议跟踪插件OFF
WITH_UBSAN启用未定义的行为清理器OFF
WITH_UNIT_TESTS用单元测试编译 MySQLON
WITH_UNIXODBC启用 unixODBC 支持OFF
WITH_VALGRIND是否在 Valgrind 头文件中编译OFF
WITH_ZLIBzlib 支持的类型bundled
WITH_xxx_STORAGE_ENGINE将存储引擎 xxx 静态编译到服务器中

General Options

  • -DBUILD_CONFIG=mysql_release

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

  • -DCMAKE_BUILD_TYPE=type

要生成的构建类型:

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

  • -DCPACK_MONOLITHIC_INSTALL=bool

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

安装布局选项

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

  • -DCMAKE_INSTALL_PREFIX=dir_name

安装基础目录。

可以在服务器启动时使用--basedir选项设置此值。

  • -DINSTALL_BINDIR=dir_name

在哪里安装用户程序。

  • -DINSTALL_DOCDIR=dir_name

在哪里安装文档。

  • -DINSTALL_DOCREADMEDIR=dir_name

哪里安装README个文件。

  • -DINSTALL_INCLUDEDIR=dir_name

在哪里安装头文件。

  • -DINSTALL_INFODIR=dir_name

在哪里安装信息文件。

  • -DINSTALL_LAYOUT=name

选择 sched 义的安装布局:

  • STANDALONE:布局与.tar.gz.zip软件包相同。这是默认值。

    • RPM:布局类似于 RPM 软件包。

    • SVR4:Solaris 软件包布局。

    • DEB:DEB 程序包布局(实验)。

您可以选择 sched 义的布局,但可以通过指定其他选项来修改各个组件的安装位置。例如:

cmake . -DINSTALL_LAYOUT=SVR4 -DMYSQL_DATADIR=/var/mysql/data

INSTALL_LAYOUT值确定secure_file_privkeyring_encrypted_file_datakeyring_file_data系统变量的默认值。请参见第 5.1.7 节“服务器系统变量”第 6.4.4.11 节,“密钥环系统变量”中对这些变量的描述。

  • -DINSTALL_LIBDIR=dir_name

在哪里安装库文件。

  • -DINSTALL_MANDIR=dir_name

在哪里安装手册页。

  • -DINSTALL_MYSQLKEYRINGDIR=dir_path

用作keyring_file插件数据文件位置的默认目录。默认值是特定于平台的,并取决于INSTALL_LAYOUT CMake 选项的值。请参见第 5.1.7 节“服务器系统变量”中对keyring_file_data系统变量的描述。

这个选项是在 MySQL 5.7.11 中添加的。

  • -DINSTALL_MYSQLSHAREDIR=dir_name

在哪里安装共享数据文件。

  • -DINSTALL_MYSQLTESTDIR=dir_name

mysql-test目录的安装位置。要禁止安装此目录,请将选项显式设置为空值(-DINSTALL_MYSQLTESTDIR=)。

  • -DINSTALL_PKGCONFIGDIR=dir_name

mysqlclient.pc文件的安装目录,以供 pkg-config 使用。除非INSTALL_LIBDIR/mysql结尾,否则默认值为INSTALL_LIBDIR/pkgconfig,在这种情况下,将首先删除该值。

  • -DINSTALL_PLUGINDIR=dir_name

插件目录的位置。

可以在服务器启动时使用--plugin_dir选项设置此值。

  • -DINSTALL_SBINDIR=dir_name

mysqld服务器的安装位置。

  • -DINSTALL_SCRIPTDIR=dir_name

哪里安装mysql_install_db

  • -DINSTALL_SECURE_FILE_PRIVDIR=dir_name

secure_file_priv系统变量的默认值。默认值是特定于平台的,并取决于INSTALL_LAYOUT CMake 选项的值;默认值为 0.请参见第 5.1.7 节“服务器系统变量”中对secure_file_priv系统变量的描述。

要设置libmysqld嵌入式服务器的值,请使用INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR

  • -DINSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR=dir_name

libmysqld嵌入式服务器的secure_file_priv系统变量的默认值。

Note

从 MySQL 5.7.19 开始不推荐使用libmysqld嵌入式服务器库,并将在 MySQL 8.0 中将其删除。

  • -DINSTALL_SHAREDIR=dir_name

哪里安装aclocal/mysql.m4

  • -DINSTALL_SUPPORTFILESDIR=dir_name

在哪里安装其他支持文件。

  • -DMYSQL_DATADIR=dir_name

MySQL 数据目录的位置。

可以在服务器启动时使用--datadir选项设置此值。

  • -DODBC_INCLUDES=dir_name

ODBC 的位置包括目录,并且可以在配置连接器/ ODBC 时使用。

  • -DODBC_LIB_DIR=dir_name

ODBC 库目录的位置,可在配置连接器/ ODBC 时使用。

  • -DSYSCONFDIR=dir_name

默认的my.cnf选项文件目录。

无法在服务器启动时设置此位置,但是可以使用--defaults-file=file_name选项使用给定的选项文件启动服务器,其中* file_name *是文件的完整路径名。

  • -DSYSTEMD_PID_DIR=dir_name

当 MySQL 由 systemdManagement 时,在其中创建 PID 文件的目录的名称。默认值为/var/run/mysqld;可能会根据INSTALL_LAYOUT值隐式更改它。

除非启用了WITH_SYSTEMD,否则将忽略此选项。

  • -DSYSTEMD_SERVICE_NAME=name

MySQL 由 systemdManagement 时使用的 MySQL 服务的名称。默认值为mysqld;可能会根据INSTALL_LAYOUT值隐式更改它。

除非启用了WITH_SYSTEMD,否则将忽略此选项。

  • -DTMPDIR=dir_name

tmpdir系统变量使用的默认位置。如果未指定,则默认值为<stdio.h>中的P_tmpdir

存储引擎选项

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

InnoDBMyISAMMERGEMEMORYCSV引擎是强制性的(始终编译到服务器中),无需明确安装。

要将存储引擎静态编译到服务器中,请使用-DWITH_engine_STORAGE_ENGINE=1。一些允许的engine值是ARCHIVEBLACKHOLEEXAMPLEFEDERATEDNDBNDBCLUSTER(NDB)和PARTITION(分区支持)。例子:

-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1

Note

仅当使用 NDB Cluster 源构建 NDB Cluster 时,才支持WITH_NDBCLUSTER_STORAGE_ENGINE。它不能用于在其他 MySQL 源树或发行版中启用集群支持。在 NDB 群集源分发中,默认情况下启用它。有关更多信息,请参见第 21.2.3.4 节“在 Linux 上从源代码构建 NDB 集群”第 21.2.4.2 节“在 Windows 上从源代码编译和安装 NDB 群集”

Note

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

DISABLE_PSI_COND
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选项配置 MySQL。

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

-DWITH_EXAMPLE_STORAGE_ENGINE=0
-DWITH_FEDERATED_STORAGE_ENGINE=0
-DWITH_PARTITION_STORAGE_ENGINE=0

也可以使用-DWITHOUT_engine_STORAGE_ENGINE=1从构建中排除存储引擎(但最好使用-DWITH_engine_STORAGE_ENGINE=0)。例子:

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1

如果没有为给定的存储引擎指定-DWITH_engine_STORAGE_ENGINE-DWITHOUT_engine_STORAGE_ENGINE,则该引擎将被构建为共享模块,如果无法将其构建为共享模块,则将其排除。

Feature Options

  • -DCOMPILATION_COMMENT=string

关于编译环境的描述性 Comment。

  • -DDEFAULT_CHARSET=charset_name

服务器字符集。默认情况下,MySQL 使用latin1(cp1252 西欧)字符集。

  • charset_name *可以是binaryarmscii8asciibig5cp1250cp1251cp1256cp1257cp850cp852cp866cp932dec8eucjpmseuckrgb2312gbk,_21,hebrewkoi8rkoi8ulatin1latin2latin5latin7maccemacromansjisswe7tis620ucs2ujisutf8utf8mb4utf16utf16leutf32cmake/character_sets.cmake文件中列出了允许的字符集,作为CHARSETS_AVAILABLE的值。

可以在服务器启动时使用--character_set_server选项设置此值。

  • -DDEFAULT_COLLATION=collation_name

服务器排序规则。默认情况下,MySQL 使用latin1_swedish_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

是否排除性能模式阶段检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_STATEMENT=bool

是否排除性能模式语句工具。默认值为OFF(包括)。

  • -DDISABLE_PSI_STATEMENT_DIGEST=bool

是否排除性能模式 statement_digest 工具。默认值为OFF(包括)。

  • -DDISABLE_PSI_TABLE=bool

是否排除性能模式 table 工具。默认值为OFF(包括)。

  • -DDISABLE_PSI_PS=bool

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

  • -DDISABLE_PSI_THREAD=bool

排除性能架构线程检测。默认值为OFF(包括)。

仅在构建时不使用任何工具时才禁用线程,因为其他工具对线程有依赖性。

  • -DDISABLE_PSI_TRANSACTION=bool

排除性能架构事务检测。默认值为OFF(包括)。

  • -DDOWNLOAD_BOOST=bool

是否下载 Boost 库。默认值为OFF

有关使用 Boost 的其他讨论,请参见WITH_BOOST选项。

  • -DDOWNLOAD_BOOST_TIMEOUT=seconds

下载 Boost 库的超时时间(以秒为单位)。默认值为 600 秒。

有关使用 Boost 的其他讨论,请参见WITH_BOOST选项。

  • -DENABLE_DOWNLOADS=bool

是否下载可选文件。例如,启用此选项后, CMake 将下载测试套件用于运行单元测试的 Google 测试发行版。

  • -DENABLE_DTRACE=bool

是否包括对 DTrace 探针的支持。有关 DTrace 的信息,请第 5.8 节“使用 DTrace 跟踪 mysqld”

不建议使用此选项,因为在 MySQL 5.7 中已弃用了对 DTrace 的支持,而在 MySQL 8.0 中已删除了对 DTrace 的支持。

  • -DENABLE_GCOV=bool

是否包括 gcov 支持(仅 Linux)。

  • -DENABLE_GPROF=bool

是否启用gprof(仅优化的 Linux 构建)。

  • -DENABLED_LOCAL_INFILE=bool

此选项控制 MySQLClient 端库的内置默认LOCAL功能。因此,没有明确安排的 Client 端将根据 MySQL 构建时指定的ENABLED_LOCAL_INFILE设置禁用或启用LOCAL功能。

默认情况下,MySQL 二进制发行版中的 Client 端库在启用ENABLED_LOCAL_INFILE的情况下进行编译。如果从源代码编译 MySQL,请根据未进行显式安排的 Client 端应分别禁用还是启用LOCAL功能,将ENABLED_LOCAL_INFILE禁用或启用。

ENABLED_LOCAL_INFILE控制 Client 端LOCAL功能的默认设置。对于服务器,local_infile系统变量控制服务器端LOCAL的功能。要明确导致服务器拒绝或允许本地加载数据语句(无论在构建时或运行时如何配置 Client 端程序和库),请分别在local_infile禁用或启用的情况下启动mysqldlocal_infile也可以在运行时设置。参见第 6.1.6 节“ LOAD DATA LOCAL 的安全注意事项”

  • -DENABLED_PROFILING=bool

是否启用查询配置代码(针对SHOW PROFILESHOW PROFILES语句)。

  • -DFORCE_UNSUPPORTED_COMPILER=bool

默认情况下, CMake 检查受支持的编译器的最低版本:Visual Studio 2013(Windows); GCC 4.4 或 Clang 3.3(Linux); Developer Studio 12.5(Solaris 服务器); Developer Studio 12.2 或 GCC 4.4(SolarisClient 端库); Clang 3.3(macOS),Clang 3.3(FreeBSD)。要禁用此检查,请使用-DFORCE_UNSUPPORTED_COMPILER=ON

  • -DIGNORE_AIO_CHECK=bool

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

  • -DMAX_INDEXES=num

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

  • -DMYSQL_MAINTAINER_MODE=bool

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

  • -DMUTEX_TYPE=type

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

  • event:使用事件互斥锁。这是默认值,也是原始的InnoDB互斥量实现。

    • sys:在 UNIX 系统上使用 POSIX 互斥锁。在 Windows 上使用CRITICAL_SECTION主题(如果有)。

    • futex:使用 Linux futexes 代替条件变量来调度 await 线程。

  • -DMYSQLX_TCP_PORT=port_num

X 插件侦听 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 系统上的构建,此选项控制是否要特别注意创建与构建位置和时间无关的构建结果。

MySQL 5.7.19 中添加了此选项。

  • -DWIN_DEBUG_NO_INLINE=bool

是否在 Windows 上禁用功能内联。默认为关闭(启用内联)。

  • -DWITH_ASAN=bool

是否为支持它的编译器启用 AddressSanitizer。默认为关闭。

  • -DWITH_ASAN_SCOPE=bool

是否启用用于范围后使用检测的 AddressSanitizer -fsanitize-address-use-after-scope Clang 标志。默认为关闭。要使用此选项,还必须启用-DWITH_ASAN

  • -DWITH_AUTHENTICATION_LDAP=bool

如果无法构建 LDAP 认证插件,是否报告错误:

  • 如果禁用此选项(默认设置),则在找到所需的头文件和库的情况下将构建 LDAP 插件。如果不是, CMake 将显示一条 Comments。

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

有关 LDAP 身份验证的信息,请参阅第 6.4.1.9 节“ LDAP 可插拔身份验证”。 MySQL 5.7.19 中添加了此选项。

  • -DWITH_AUTHENTICATION_PAM=bool

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

  • -DWITH_AWS_SDK=path_name

Amazon Web Services 软件开发套件的位置。

MySQL 5.7.19 中添加了此选项。

  • -DWITH_BOOST=path_name

Boost 库是构建 MySQL 所必需的。这些 CMake 选项可控制库源位置以及是否自动下载:

  • -DWITH_BOOST=path_name指定 Boost 库目录位置。也可以通过设置BOOST_ROOTWITH_BOOST环境变量来指定 Boost 位置。

从 MySQL 5.7.11 开始,允许-DWITH_BOOST=system,并指示在标准位置的编译主机上安装了正确版本的 Boost。在这种情况下,将使用已安装的 Boost 版本,而不是 MySQL 源代码发行版随附的任何版本。

例如,如果您通常构建 MySQL 并将对象输出放置在 MySQL 源树的bld子目录中,则可以使用 Boost 进行构建,如下所示:

mkdir bld
cd bld
cmake .. -DDOWNLOAD_BOOST=ON -DWITH_BOOST=$HOME/my_boost

这将使 Boost 下载到主目录下的my_boost目录中。如果所需的 Boost 版本已经存在,则无需下载。如果所需的 Boost 版本更改,则下载较新的版本。

如果已经在本地安装了 Boost,并且编译器自己找到了 Boost 头文件,则可能不必指定前面的 CMake 选项。但是,如果 MySQL 所需的 Boost 版本有所更改,而本地安装的版本尚未升级,则可能会出现构建问题。使用 CMake 选项应该可以成功构建。

使用上述允许 Boost 下载到指定位置的设置,当所需的 Boost 版本更改时,您需要删除bld文件夹,重新创建它,然后再次执行 cmake 步骤。否则,可能不会下载新的 Boost 版本,并且编译可能会失败。

  • -DWITH_CLIENT_PROTOCOL_TRACING=bool

是否将 Client 端协议跟踪框架构建到 Client 端库中。默认情况下,启用此选项。

有关编写协议跟踪 Client 端插件的信息,请参见第 28.2.4.11 节,“编写协议跟踪插件”

另请参见WITH_TEST_TRACE_PLUGIN选项。

  • -DWITH_CURL=curl_type

curl 库的位置。 * curl_type *可以是system(使用系统 curl 库)或 curl 库的路径名。

MySQL 5.7.19 中添加了此选项。

  • -DWITH_DEBUG=bool

是否包括调试支持。

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

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

从 MySQL 5.7.18 开始,启用WITH_DEBUG也将启用 Debug Sync。有关“调试同步”功能以及如何使用同步点的说明,请参见MySQL 内部:测试同步

  • -DWITH_DEFAULT_FEATURE_SET=bool

是否使用cmake/build_configurations/feature_set.cmake中的标志。

  • -DWITH_EDITLINE=value

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

WITH_EDITLINE替换了已删除的WITH_LIBEDIT

  • -DWITH_EMBEDDED_SERVER=bool

是否构建libmysqld嵌入式服务器库。

Note

从 MySQL 5.7.17 开始不推荐使用libmysqld嵌入式服务器库,并且已在 MySQL 8.0 中将其删除。

  • -DWITH_EMBEDDED_SHARED_LIBRARY=bool

是否构建共享的libmysqld嵌入式服务器库。

Note

从 MySQL 5.7.17 开始不推荐使用libmysqld嵌入式服务器库,并且已在 MySQL 8.0 中将其删除。

  • -DWITH_EXTRA_CHARSETS=name

要包括的额外字符集:

  • all:所有字符集。这是默认值。

    • complex:复杂的字符集。

    • none:没有多余的字符集。

  • -DWITH_INNODB_EXTRA_DEBUG=bool

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

启用WITH_INNODB_EXTRA_DEBUG将打开额外的 InnoDB 调试检查。仅当启用WITH_DEBUG时,才能启用此选项。

  • -DWITH_GMOCK=path_name

googlemock 发行版的路径,用于基于 Google Test 的单元测试。该选项值是分发 Zip 文件的路径。或者,将WITH_GMOCK环境变量设置为路径名。也可以使用-DENABLE_DOWNLOADS=1CMake 从 GitHub 下载发行版。

如果您构建的 MySQL 没有基于 Google 测试的单元测试(通过配置 wihout WITH_GMOCK),则 CMake 会显示一条消息,指示如何下载它。

  • -DWITH_INNODB_MEMCACHED=bool

是否生成 memcached 共享库(libmemcached.soinnodb_engine.so)。

  • -DWITH_KEYRING_TEST=bool

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

这个选项是在 MySQL 5.7.11 中添加的。

  • -DWITH_LDAP=value

仅供内部使用。 MySQL 5.7.29 中添加了此选项。

  • -DWITH_LIBEVENT=string

要使用哪个libevent库。允许的值为bundled(默认值),systemyes。如果指定systemyes,则使用系统libevent库(如果存在)。如果找不到系统库,则使用 Binding 的libevent库。 InnoDB memcached 需要libevent库。

  • -DWITH_LIBWRAP=bool

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

  • -DWITH_LZ4=lz4_type

WITH_LZ4table 示zlib支持的来源:

  • bundled:使用与发行版 Binding 在一起的LZ4库。这是默认值。

    • system:使用系统LZ4库。如果WITH_LZ4设置为该值,则不会构建lz4_decompressUtil。在这种情况下,可以改用 system lz4 命令。
  • -DWITH_MSAN=bool

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

为了使此选项生效(如果启用),还必须在启用该选项的情况下编译所有链接到 MySQL 的库。

  • -DWITH_MECAB={disabled|system|path_name}

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

有关相关信息,请参见第 12.9.9 节“ MeCab 全文分析器插件”

  • -DWITH_MSCRT_DEBUG=bool

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

  • -DWITH_NUMA=bool

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

  • 如果没有 NUMA 选项(正常情况), CMake 将 continue 正常运行,仅产生以下警告:缺少 NUMA 库或所需的版本不可用

    • 使用-DWITH_NUMA=ON时, CMake 会因以下错误而中止:缺少 NUMA 库或所需的版本不可用

MySQL 5.7.17 中添加了此选项。

  • -DWITH_PROTOBUF=protobuf_type

使用哪个协议缓冲区包。 * protobuf_type *可以是以下值之一:

  • bundled:使用与发行版 Binding 在一起的软件包。这是默认值。

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

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

MySQL 5.7.12 中添加了此选项。

  • -DWITH_RAPID=bool

是否构建快速开发周期的插件。启用后,将在包含这些插件的构建树中创建一个rapid目录。禁用后,不会在构建树中创建rapid目录。默认值为ON,除非从源树中删除了rapid目录,在这种情况下默认值为OFF。 MySQL 5.7.12 中添加了此选项。

  • -DWITH_SASL=value

仅供内部使用。 MySQL 5.7.29 中添加了此选项。

  • -DWITH_SSL={ssl_type | path_name }

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

    • ssl_type *可以是以下值之一:
  • yes:使用系统 OpenSSL 库(如果存在),否则使用与发行版 Binding 在一起的库。

    • bundled:使用与发行版 Binding 在一起的 SSL 库。这是 MySQL 5.7.28 之前的默认设置。从 5.7.28 开始,该值不再是允许的值,默认值为system

    • system:使用系统 OpenSSL 库。自 MySQL 5.7.28 起,这是默认设置。

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

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

  • -DWITH_SYSTEMD=bool

是否启用安装 systemd 支持文件。默认情况下,此选项处于禁用状态。启用后,将安装 systemd 支持文件,并且不会安装诸如mysqld_safe和 System V 初始化脚本之类的脚本。在 systemd 不可用的平台上,启用WITH_SYSTEMD会导致 CMake 错误。

有关使用 systemd 的更多信息,请参见第 2.5.10 节“使用 systemdManagementMySQL 服务器”。该部分还包括有关指定先前在[mysqld_safe]选项组中指定的选项的信息。因为使用 systemd 时未安装mysqld_safe,所以必须以其他方式指定此类选项。

  • -DWITH_TEST_TRACE_PLUGIN=bool

是否构建测试协议跟踪 Client 端插件(请参见第 28.2.4.11.1 节,“使用测试协议跟踪插件”)。默认情况下,此选项处于禁用状态。除非启用WITH_CLIENT_PROTOCOL_TRACING选项,否则启用此选项无效。如果 MySQL 同时配置了两个选项,则libmysqlclientClient 端库是使用内置的测试协议跟踪插件构建的,并且所有标准 MySQLClient 端都会加载该插件。但是,即使启用了测试插件,默认情况下它也不起作用。使用环境变量可以控制插件。参见第 28.2.4.11.1 节,“使用测试协议跟踪插件”

Note

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

有关编写跟踪插件的信息,请参见第 28.2.4.11 节,“编写协议跟踪插件”

  • -DWITH_UBSAN=bool

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

  • -DWITH_UNIT_TESTS={ON|OFF}

如果启用,请使用单元测试编译 MySQL。除非未编译服务器,否则默认值为 ON。

  • -DWITH_UNIXODBC=1

为连接器/ ODBC 启用 unixODBC 支持。

  • -DWITH_VALGRIND=bool

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

为了生成可识别 Valgrind 的调试版本,通常将-DWITH_VALGRIND=1-DWITH_DEBUG=1结合使用。参见构建调试配置

  • -DWITH_ZLIB=zlib_type

一些功能要求使用压缩库支持构建服务器,例如COMPRESS()UNCOMPRESS()函数,以及压缩 Client 端/服务器协议。 WITH_ZLIBtable 示zlib支持的来源:

  • bundled:使用与发行版 Binding 在一起的zlib库。这是默认值。

    • system:使用系统zlib库。

Compiler Flags

  • -DCMAKE_C_FLAGS="flags "

C 编译器的标志。

  • -DCMAKE_CXX_FLAGS="flags "

C 编译器的标志。

  • -DWITH_DEFAULT_COMPILER_OPTIONS=bool

是否使用cmake/build_configurations/compiler_options.cmake中的标志。

Note

所有的优化标志都是由 MySQL 构建团队精心选择和测试的。覆盖它们会导致意外的结果,后果自负。

  • -DSUNPRO_CXX_LIBRARY="lib_name "

在 Solaris 10 或更高版本上,启用针对libCstd而不是stlport4的链接。这仅适用于 Client 端代码,因为服务器依赖于 C 98.

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

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

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

mkdir bld
cd bld
cmake .. -DCMAKE_C_FLAGS=-m32 \
  -DCMAKE_CXX_FLAGS=-m32 \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo

如果设置影响优化的标志(-Onumber),则必须设置CMAKE_C_FLAGS_build_type和/或CMAKE_CXX_FLAGS_build_type选项,其中* build_type *对应于CMAKE_BUILD_TYPE值。要为默认的构建类型(RelWithDebInfo)指定其他优化,请设置CMAKE_C_FLAGS_RELWITHDEBINFOCMAKE_CXX_FLAGS_RELWITHDEBINFO选项。例如,要在具有-O3和调试符号的 Linux 上进行编译,请执行以下操作:

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

用于编译 NDB 群集的 CMake 选项

在使用 NDB Cluster 源构建 NDB Cluster 时,可以使用以下选项;使用 MySQL 5.6 服务器树中的源时,当前不支持它们。

  • -DMEMCACHED_HOME=dir_name

使用安装在* dir_name *指示的系统目录中的 memcached(1.6 或更高版本)执行构建。此安装中用于构建的文件包括 memcached 二进制文件,头文件和库,以及memcached_utilities库和头文件engine_testapp.h

使用 Binding 的 Memcached 源构建ndbmemcache时,必须保留此选项的设置(WITH_BUNDLED_MEMCACHED选项);换句话说,默认情况下使用 Binding 的来源。

虽然从外部源编译 memcached 时可以使用其他 CMake 选项(例如,用于 SASL 授权和提供dtrace支持),但是当前 Binding 的 memcached 源未启用这些选项。使用 NDB 群集。

  • -DWITH_BUNDLED_LIBEVENT={ON|OFF}

使用ndbmemcached支持构建 NDB 群集时,请使用 NDB 群集源中包含的libevent。默认启用。 OFF导致改用系统的libevent

  • -DWITH_BUNDLED_MEMCACHED={ON|OFF}

构建 NDB 群集源树中包含的 memcached 源,然后在构建ndbmemcache引擎时使用生成的 memcached 服务器。在这种情况下, make install 会将 memcached 二进制文件放置在安装bin目录中,并将ndbmemcache引擎共享库文件ndb_engine.so放置在安装lib目录中。

默认情况下,此选项为 ON。

  • -DWITH_CLASSPATH=path

设置用于构建 NDB Cluster Connector for Java 的 Classpath。默认为空。如果使用-DWITH_NDB_JAVA=OFF,则忽略此选项。

  • -DWITH_ERROR_INSERT={ON|OFF}

NDB内核中启用错误注入。仅用于测试;不适用于构建生产二进制文件。默认值为OFF

  • -DWITH_NDBCLUSTER_STORAGE_ENGINE={ON|OFF}

构建并链接以支持mysqld中的NDB(NDBCLUSTER)存储引擎。默认值为ON

  • -DWITH_NDBCLUSTER={ON|OFF}

这是WITH_NDBCLUSTER_STORAGE_ENGINE的别名。

  • -DWITH_NDBMTD={ON|OFF}

构建多线程数据节点可执行文件ndbmtd。默认值为ON

  • -DWITH_NDB_BINLOG={ON|OFF}

默认情况下,在使用此选项构建的mysqld中启用二进制日志记录。默认为开。

  • -DWITH_NDB_DEBUG={ON|OFF}

启用构建 NDB 群集二进制文件的调试版本。默认关闭。

  • -DWITH_NDB_JAVA={ON|OFF}

启用使用 Java 支持(包括ClusterJ)构建 NDB 群集。

默认情况下,此选项为 ON。如果您不希望使用 Java 支持编译 NDB 群集,则必须在运行 CMake 时通过指定-DWITH_NDB_JAVA=OFF显式禁用它。否则,如果找不到 Java,则构建的配置将失败。

  • -DWITH_NDB_PORT=port

默认情况下,使 NDB 群集 Management 服务器(ndb_mgmd)构建为使用此* port *。如果未设置此选项,则默认情况下,结果 Management 服务器将尝试使用端口 1186.

  • -DWITH_NDB_TEST={ON|OFF}

如果启用,请包括一组 NDB API 测试程序。默认为关闭。