MySQL8 中文参考(五) mysql8.1

MySQL8 中文参考(五) 原文:docs.oracle.com/javase/tutorial/reallybigindex.html 2.5.5 使用 Oracle 的 Debian 软件包在 Linux 上安装 MyS

原文:docs.oracle.com/javase/tutorial/reallybigindex.html

2.5.5 使用 Oracle 的 Debian 软件包在 Linux 上安装 MySQL

原文:dev.mysql.com/doc/refman/8.0/en/linux-installation-debian.html

Oracle 提供了Debian 软件包,用于在Debian 或类Debian Linux 系统上安装MySQL。这些软件包可通过两个不同的渠道获得:

MySQL APT 存储库。这是在Debian 等系统上安装MySQL 的推荐方法,因为它提供了一种简单方便的方法来安装和更新MySQL 产品。有关更多信息,请参阅使用MySQL APT 存储库在Linux 上安装MySQL。

MySQL开发者专区下载专区。详细信息请参见如何获取MySQL。以下是有关此处提供的Debian 软件包的信息和安装说明。

MySQL 开发者专区提供了各种Debian 软件包,用于在当前Debian 和Ubuntu 平台上安装MySQL 的各种组件。推荐的方法是使用包含基本MySQL 设置所需的软件包的tarball 包。 tarball 包名称的格式为mysql-server_*MVER*-*DVER*_*CPU*.deb-bundle.tar。 *MVER 是MySQL 版本,DVER 是Linux 发行版。 CPU* 值指示构建该软件包的处理器的类型或系列,如下表所示。

表2.13 MySQL Debian 和Ubuntu 安装包的CPU 标识符

CPU 值预期处理器类型或系列i386 Pentium 处理器或更高版本、32 位amd64 64 位x86 处理器下载tarball 后,使用以下命令将其解压缩:

$ tar -xvf mysql-server_*MVER*-*DVER*_*CPU*.deb-bundle.tar

如果您的系统上尚未安装libaio 库,您可能需要安装它。

$ sudo apt-get install libaio1

使用以下命令预配置MySQL 服务器包:

$ sudo dpkg-预配置mysql-community-server_*.deb

系统将要求您输入MySQL 安装的root 用户的密码。您可能还会收到有关安装的其他问题。

重要的

请务必记住您设置的root 密码。希望稍后设置密码的用户只需将对话框中的密码字段留空,然后按“确定”即可。在这种情况下,对使用Unix 套接字文件连接到的服务器的root 访问是通过对等凭据身份验证实现的。这是一个验证插件。稍后可以使用mysql_secure_installation 设置root 密码。

MySQL Server 的基本安装将安装数据库公共包、客户端包、客户端元包、服务器包和服务器元包(按顺序)。这可以通过一个命令来完成。

$ sudo dpkg -i mysql-{common,社区客户端插件,社区客户端核心,社区客户端,客户端,社区服务器核心,社区服务器,服务器}_*.deb

还有一些软件包的软件包名称中包含server-core 和client-core。它们仅包含二进制文件,并由标准包自动安装。如果单独安装这些,MySQL 将无法正常运行。

如果dpkg(如libmecab2)提示有未满足的依赖,可以使用apt-get解决。

sudo apt-get -f 安装

以下是系统上文件的安装位置:

所有配置文件(例如my.cnf)都位于/etc/mysql 中。

所有二进制文件、库、头文件等都位于/usr/bin 和/usr/sbin 中。

数据目录位于/var/lib/mysql。

消息

其他供应商也提供MySQL 的Debian 发行版。请注意,这些版本在特性、功能和约定(包括通信设置)方面可能与Oracle 构建的版本不同,并且本文档中的说明不一定适用于它们的安装。请参阅供应商的说明。

2.5.6 在 Linux 上使用 Docker 容器部署 MySQL

原文:dev.mysql.com/doc/refman/8.0/en/linux-installation-docker.html

2.5.6.1 使用Docker部署MySQL服务器的基本步骤

2.5.6.2 关于使用Docker 部署MySQL 服务器的其他主题

2.5.6.3 在Windows和其他非Linux平台上使用Docker部署MySQL

本节介绍如何使用Docker容器部署MySQL服务器。

以下步骤使用Docker 客户端进行演示,但一般来说,Oracle 提供的MySQL 容器镜像可以与任何符合OCI 1.0 规范的容器工具一起使用。

警告

在使用Docker 容器部署MySQL 之前,请了解与运行容器相关的安全风险并适当缓解它们。

原文:dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html

2.5.6.1 使用 Docker 部署 MySQL 服务器的基本步骤

警告

MySQL 团队维护的MySQL Docker 镜像是专门为Linux 平台构建的。这些MySQL Docker 映像的用户需要自行承担风险,因为不支持其他平台。有关在Linux 以外的操作系统上运行这些容器的已知限制,请参阅此处的描述。

下载MySQL 服务器Docker 镜像

启动MySQL 服务器实例

从容器内连接到MySQL 服务器

访问容器外壳

停止并删除MySQL 容器

升级MySQL服务器容器

有关使用Docker 部署MySQL 服务器的其他主题

下载 MySQL 服务器 Docker 镜像

重要的

对于MySQL 企业版用户:要使用Docker 映像,您需要订阅MySQL 企业版。订阅基于自带许可模式。有关更多信息,请参阅如何购买MySQL 产品和服务。

下载服务器映像作为单独的步骤并不是绝对必要的。但是,如果您在创建Docker 容器之前执行此步骤,您的本地映像将是最新的。要从Oracle 容器注册表(OCR) 下载MySQL 社区版映像,请运行以下命令:

docker pullcontainer-registry.oracle.com/mysql/community-server:*标签*

tag 是要拉取的映像版本的标签(例如5.7、8.0 或最新)。*如果省略*标签***,将使用最新标签并下载MySQL社区服务器的最新GA版本镜像。

要通过OCR下载MySQL Enterprise镜像,您必须首先接受OCR许可协议并使用Docker客户端登录容器存储库。请按照以下步骤操作:

访问OCR 网站“container-registry.oracle.com/”并选择“MySQL”。

在MySQL 存储库列表中选择enterprise-server。

如果您尚未登录OCR,请单击页面右侧的“登录”按钮,并在出现提示时输入您的Oracle 帐户凭据。

按照页面右侧的说明接受许可协议。

例如,使用docker login 命令登录OCR 客户端。

# docker 登录container-registry.oracle.com

用户名: *Oracle 帐户ID*

密码: *密码*

登陆成功。

使用以下命令从OCR 下载MySQL 企业版映像:

docker pullcontainer-registry.oracle.com/mysql/enterprise-server:*标签*

要从My Oracle Support 网站下载MySQL 企业版映像,请访问该网站,登录您的Oracle 帐户,然后在登录页面上执行以下步骤:

选择补丁和更新选项卡。

转到补丁搜索区域并切换到搜索选项卡上的产品或系列(高级)子选项卡。

在“产品”字段中输入MySQL Server,并在“版本”字段中输入所需的版本号。

要进一步过滤,请使用下拉菜单并选择描述- 包含,然后在文本字段中输入Docker。

下图显示了MySQL Server 8.0 中MySQL 企业版映像的搜索设置。

单击“搜索”按钮,从结果列表中选择所需的版本,然后单击“下载”按钮。

在弹出的文件下载对话框中,单击,下载Docker镜像.zip文件。

解压下载的.zip 存档以获取内部tarball (mysql-enterprise-server-*version*.tar) 并运行以下命令来加载映像。

dockerload -i mysql-enterprise-server-*版本*.tar

您可以使用以下命令列出下载的Docker 映像:

$ 码头工人图像

存储库标签图像ID 创建大小

Container-registry.oracle.com/mysql/community-server 最新1d9c2219ff69 2 个月前496MB

启动 MySQL 服务器实例

要为MySQL Server 启动新的Docker 容器,请使用以下命令:

docker run –name=*container_name* –restart on-failure -d *image_name*:*tag*

image_name 是用于启动容器的映像的名称。有关更多信息,请参阅下载MySQL 服务器Docker 映像。

–name 选项指定服务器容器的自定义名称。如果未指定容器名称,则会生成随机名称。

–restart 选项用于配置容器重启策略。必须设置为值on-failure 以启用对在客户端会话中重新启动服务器的支持(例如,当客户端执行RESTART 语句或在容器配置期间发生)。 InnoDB 集群实例)。如果启用了重新启动支持,则在客户端会话中发出重新启动命令将停止并重新启动服务器和容器。 MySQL 8.0.21及更高版本支持服务器重启。

例如,要启动新的MySQL Community Server Docker 容器,请使用以下命令:

docker run –name=mysql1 –restart on-failure -dcontainer-registry.oracle.com/mysql/community-server:latest

要使用从OCR 下载的Docker 映像为MySQL Enterprise Server 启动新的Docker 容器,请使用以下命令:

docker run –name=mysql1 –restart on-failure -dcontainer-registry.oracle.com/mysql/enterprise-server:latest

要使用从My Oracle Support 下载的Docker 映像为MySQL Enterprise Server 启动新的Docker 容器,请使用以下命令:

docker run –name=mysql1 –restart on-failure -d mysql/enterprise-server:latest

如果之前的docker pull 或docker run 命令未下载具有指定名称和标签的Docker 映像,则在此处下载该映像。当您运行docker ps 命令时,容器将开始初始化并出现在正在运行的容器列表中。例如:

$ Docker PS

容器ID 镜像命令创建状态端口名称

4cd4129b3211container-registry.oracle.com/mysql/community-server:latest \’/entrypoint.sh mysq…\’ 8 秒前7 秒前(health: 启动) 3306/tcp, 33060-33061/tcp mysql1

容器初始化可能需要一些时间。当服务器准备就绪时,docker ps命令输出中的容器状态从(health: running)变为(healthy)。

上面的docker run 命令中使用的-d 选项在后台运行容器。使用以下命令监视容器输出:

docker 日志mysql1

初始化完成后,命令的输出将包括为root 用户生成的随机密码。例如,使用以下命令检查您的密码。

$ docker log mysql1 21 | 生成

生成的root 密码: Axegh3kAJyDLaRuBemecisEShOS

从容器内连接到 MySQL 服务器

服务器准备就绪后,您可以通过在刚刚启动的MySQL 服务器容器内运行mysql 客户端来连接到MySQL 服务器。使用docker exec -it 命令在已启动的Docker 容器内启动mysql 客户端:

docker exec -it mysql1 mysql -uroot -p

出现提示时,输入生成的root 密码(请参阅启动MySQL 服务器实例中如何查找密码中的最后一步)。 MYSQL_ONETIME_PASSWORD 选项的默认值为true,因此在连接到服务器的mysql 客户端后,必须发出以下语句来重置服务器的root 密码。

mysql ALTER USER \’root\’@\’localhost\’ 由\’*password*\’ 识别;

将*密码*替换为您选择的密码。重置密码后,服务器即可使用。

容器 Shell 访问

要访问MySQL Server 容器的shell,请使用docker exec -it 命令在容器内启动bash shell。

$ docker exec -it mysql1 bash

bash-4.2#

然后,您将能够在容器内运行Linux 命令。例如,要查看容器内服务器数据目录的内容,请使用以下命令:

bash-4.2# ls /var/lib/mysql

auto.cnf ca.pem client-key.pem ib_logfile0 ibdata1 mysql mysql.sock.lock private_key.pem server-cert.pem sys

ca-key.pem 客户端-cert.pem ib_buffer_pool ib_logfile1 ibtmp1 mysql.sock Performance_schema public_key.pem 服务器密钥.pem

停止和删除 MySQL 容器

要停止您创建的MySQL 服务器容器,请使用以下命令:

docker 停止mysql1

docker stop 向mysqld 进程发送SIGTERM 信号,以便服务器可以正常关闭。

另请注意,当容器的主进程(对于MySQL Server 容器而言是mysqld)停止时,Docker 容器会自动停止。

再次启动MySQL 服务器容器:

docker启动mysql1

要立即停止并重新启动MySQL 服务器容器:

docker重启mysql1

要删除MySQL 容器,请先停止该容器,然后使用docker rm 命令。

docker 停止mysql1

docker rmmysql1

如果您还想删除服务器数据目录的Docker 卷,请将-v 选项添加到docker rm 命令。

升级 MySQL 服务器容器

重要提示

在执行MySQL 升级之前,请仔细遵循第3 章“升级MySQL”中的说明。在其中描述的步骤中,升级之前备份数据库尤其重要。

本部分中的步骤要求您在主机上已有服务器数据和配置。有关更多信息,请参阅数据持久性和配置更改。

要将MySQL 5.7 Docker 安装升级到8.0,请执行以下步骤:

停止MySQL 5.7服务器(在本例中,容器名称为mysql57)。

dockerstop mysql57

下载MySQL 8.0 服务器Docker 镜像。请参阅下载MySQL 服务器Docker 映像中的说明。请务必使用正确的MySQL 8.0 标签。

在主机上保留旧服务器的数据和配置(如果需要进行适当的更改,请参阅第3 章“升级MySQL”)(在本例中,通过绑定挂载)。对于MySQL 社区服务器,运行以下命令:

docker run –name=mysql80 \\

–mount type=bind,src=/主机上的路径/my.cnf,dst=/etc/my.cnf \\

–mount type=bind,src=/主机上的路径/datadir,dst=/var/lib/mysql \\

-d containerregistry.oracle.com/mysql/community-server:8.0

如有必要,请将container-registry.oracle.com/mysql/community-server调整为正确的映像名称。例如,将从OCR下载的MySQL企业版镜像替换为container-registry.oracle.com/mysql/enterprise-server。或者,将mysql/enterprise-server 替换为从My Oracle Support 下载的MySQL Enterprise Edition 映像。

等待服务器完成启动。您可以使用docker ps 命令检查服务器的状态(请参阅启动MySQL 服务器实例)。

与在8.0 系列内升级(即从版本8.0.x 到8.0.y)时的步骤相同:停止原始容器并使用旧服务器数据和配置启动新容器。如果您使用8.0 或最新标签启动原始容器,并且需要升级到新的MySQL 8.0 版本,则必须首先使用以下命令拉取新版本映像:

docker pull container-registry.oracle.com/mysql/community-server:8.0

然后,您可以通过在旧数据和配置之上启动新容器来进行升级(如果您使用的是MySQL Enterprise Edition,请调整映像名称;请参阅下载MySQL Server Docker 映像)。

docker run –name=mysql80new \\

–mount type=bind,src=/主机上的路径/my.cnf,dst=/etc/my.cnf \\

–mount type=bind,src=/主机上的路径/datadir,dst=/var/lib/mysql \\

-d containerregistry.oracle.com/mysql/community-server:8.0

消息

对于MySQL 8.0.15 及更早版本:您必须在MySQL 8.0 服务器容器上运行mysql_upgrade 实用程序才能完成升级过程(对于MySQL 8.0.16 及更高版本,不需要此步骤)。

docker exec -it mysql80 mysql_upgrade -uroot -p

出现提示时,输入旧服务器的root 密码。

重新启动新容器以完成升级。

docker重启mysql80

使用 Docker 部署 MySQL 服务器的更多主题

有关使用Docker 部署MySQL Server 的其他主题,例如服务器配置、持久数据和配置、服务器错误日志记录以及容器环境变量,请参阅第2.5.6.2 节“有关使用Docker 部署MySQL Server 的其他主题”。

原文:dev.mysql.com/doc/refman/8.0/en/docker-mysql-more-topics.html

2.5.6.2 使用 Docker 部署 MySQL 服务器的更多主题

消息

以下命令示例大多数使用container-registry.oracle.com/mysql/community-server作为Docker镜像(例如docker pull和docker run命令)。例如,如果图像来自另一个存储库,请更改它。 usecontainer-registry .oracle.com/mysql/enterprise-server 使用从My Oracle Support 下载的MySQL 企业版映像替换从Oracle 容器注册表(OCR) 或mysql/enterprise-server 下载的MySQL 企业版映像。

针对Docker 优化的MySQL 安装

配置MySQL服务器

保留数据和配置更改

运行额外的初始化脚本

从另一个Docker 容器中的应用程序连接到MySQL

服务器错误日志

将MySQL 企业备份与Docker 结合使用

位于多克

r 中使用 mysqldump
已知问题
Docker 环境变量

为 Docker 优化的 MySQL 安装

MySQL 的 Docker 镜像经过了代码大小的优化,这意味着它们只包含了对于在 Docker 容器中运行 MySQL 实例的大多数用户来说是相关的关键组件。MySQL Docker 安装与常规的非 Docker 安装在以下方面有所不同:

只包含有限数量的二进制文件。
所有二进制文件都经过了剥离;它们不包含调试信息。

警告

用户对 Docker 容器执行的任何软件更新或安装(包括 MySQL 组件)可能与 Docker 镜像创建的优化 MySQL 安装发生冲突。Oracle 不支持在这种被更改的容器中运行的 MySQL 产品,或者从被更改的 Docker 镜像创建的容器。

配置 MySQL 服务器

当您启动 MySQL Docker 容器时,可以通过 docker run 命令向服务器传递配置选项。例如:

docker run –name mysql1 -d container-registry.oracle.com/mysql/community-server:*tag* –character-set-server=utf8mb4 –collation-server=utf8mb4_col

该命令以 utf8mb4 作为默认字符集和 utf8mb4_col 作为数据库的默认排序规则启动 MySQL 服务器。

配置 MySQL 服务器的另一种方法是准备一个配置文件,并将其挂载到容器内部服务器配置文件的位置。详细信息请参见 持久化数据和配置更改。

持久化数据和配置更改

Docker 容器原则上是短暂的,如果容器被删除或损坏,则预计任何数据或配置都将丢失(请参见此处的讨论)。Docker 卷 提供了一种机制来持久化在 Docker 容器内创建的数据。在初始化时,MySQL 服务器容器为服务器数据目录创建一个 Docker 卷。容器上的 docker inspect 命令的 JSON 输出包含一个 Mount 键,其值提供有关数据目录卷的信息:

$> docker inspect mysql1

\”Mounts\”: [
{
\”Type\”: \”volume\”,
\”Name\”: \”4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652\”,
\”Source\”: \”/var/lib/docker/volumes/4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652/_data\”,
\”Destination\”: \”/var/lib/mysql\”,
\”Driver\”: \”local\”,
\”Mode\”: \”\”,
\”RW\”: true,
\”Propagation\”: \”\”
}
],

输出显示,源目录 /var/lib/docker/volumes/4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652/_data,其中数据在主机上持久化,已挂载到容器内部的 /var/lib/mysql,即服务器数据目录。

保留数据的另一种方法是在创建容器时使用 –mount 选项 绑定挂载 主机目录。相同的技术可以用于持久化服务器的配置。以下命令创建一个 MySQL 服务器容器,并同时绑定挂载数据目录和服务器配置文件:

docker run –name=mysql1 \\
–mount type=bind,src=*/path-on-host-machine/my.cnf*,dst=/etc/my.cnf \\
–mount type=bind,src=*/path-on-host-machine/datadir*,dst=/var/lib/mysql \\
-d container-registry.oracle.com/mysql/community-server:*tag*

该命令将 *path-on-host-machine/my.cnf* 挂载到 /etc/my.cnf(容器内部的服务器配置文件),并将 *path-on-host-machine/datadir* 挂载到 /var/lib/mysql(容器内部的数据目录)。绑定挂载工作的前提条件如下:

配置文件 *path-on-host-machine/my.cnf* 必须已经存在,并且必须包含由用户 mysql 启动服务器的规范:
[mysqld]
user=mysql
您还可以在文件中包含其他服务器配置选项。
数据目录 *path-on-host-machine/datadir* 必须已经存在。为了进行服务器初始化,目录必须为空。您还可以挂载一个预先填充了数据的目录并启动服务器;但是,您必须确保使用与创建数据的服务器相同的配置启动 Docker 容器,并在启动容器时挂载任何所需的主机文件或目录。

运行额外的初始化脚本

如果有任何.sh或.sql脚本需要在数据库创建后立即运行,您可以将它们放入主机目录,然后将该目录挂载到容器内的/docker-entrypoint-initdb.d/。例如:

docker run –name=mysql1 \\
–mount type=bind,src=*/path-on-host-machine/scripts/*,dst=/docker-entrypoint-initdb.d/ \\
-d container-registry.oracle.com/mysql/community-server:*tag*

从另一个 Docker 容器中的应用程序连接到 MySQL

通过设置一个 Docker 网络,您可以允许多个 Docker 容器相互通信,以便另一个 Docker 容器中的客户端应用程序可以访问服务器容器中的 MySQL 服务器。首先,创建一个 Docker 网络:

docker network create *my-custom-net*

然后,在创建和启动服务器和客户端容器时,使用–network选项将它们放在您创建的网络上。例如:

docker run –name=mysql1 –network=*my-custom-net* -d container-registry.oracle.com/mysql/community-server

docker run –name=myapp1 –network=*my-custom-net* -d myapp

myapp1容器可以通过mysql1主机名连接到mysql1容器,反之亦然,因为 Docker 会自动为给定的容器名称设置 DNS。在以下示例中,我们从myapp1容器内部运行mysql客户端,以连接到其自己容器中的主机mysql1:

docker exec -it myapp1 mysql –host=mysql1 –user=myuser –password

有关容器的其他网络技术,请参阅 Docker 文档中的Docker 容器网络部分。

服务器错误日志

当首次使用服务器容器启动 MySQL 服务器时,如果以下条件之一为真,则不会生成服务器错误日志:

从主机挂载了一个服务器配置文件,但该文件不包含系统变量log_error(参见持久化数据和配置更改关于绑定挂载服务器配置文件)。
未从主机挂载服务器配置文件,但 Docker 环境变量MYSQL_LOG_CONSOLE为true(这是 MySQL 8.0 服务器容器的默认状态)。然后,MySQL 服务器的错误日志被重定向到stderr,因此错误日志进入 Docker 容器的日志,并可以使用**docker logs *mysqld-container***命令查看。

要使 MySQL Server 在以下两种情况之一为真时生成错误日志,请使用–log-error选项来配置服务器以在容器内的特定位置生成错误日志。要持久化错误日志,请按照持久化数据和配置更改中的说明,在容器内的错误日志位置挂载主机文件。但是,您必须确保 MySQL Server 在其容器内具有对挂载主机文件的写访问权限。

使用 Docker 的 MySQL 企业备份

MySQL 企业备份是 MySQL Server 的商业许可备份实用程序,可在MySQL 企业版中使用。MySQL 企业备份包含在 MySQL 企业版的 Docker 安装中。

在以下示例中,我们假设您已经在 Docker 容器中运行了一个 MySQL Server(请参阅 Section 2.5.6.1,“使用 Docker 部署 MySQL Server 的基本步骤”以了解如何使用 Docker 启动 MySQL Server 实例)。为了让 MySQL 企业备份备份 MySQL Server,它必须能够访问服务器的数据目录。例如,可以通过在启动服务器时将主机目录绑定到 MySQL Server 的数据目录来实现这一点:

docker run –name=mysqlserver \\
–mount type=bind,src=*/path-on-host-machine/datadir/*,dst=/var/lib/mysql \\
-d mysql/enterprise-server:8.0

使用此命令,MySQL Server 将使用 MySQL 企业版的 Docker 镜像启动,并且主机目录*/path-on-host-machine/datadir/*已挂载到服务器容器内的数据目录(/var/lib/mysql)。我们还假设,在服务器启动后,已为 MySQL 企业备份设置了访问服务器所需权限(有关详细信息,请参见授予 MySQL 备份管理员权限)。按照以下步骤备份和恢复 MySQL Server 实例。

要使用 Docker 的 MySQL 企业备份备份在 Docker 容器中运行的 MySQL Server 实例,请按照这里列出的步骤操作:

在运行 MySQL 服务器容器的同一主机上,使用 MySQL 企业版镜像启动另一个容器,使用 MySQL 企业版备份命令 backup-to-image 执行备份。使用我们在上一步创建的绑定挂载访问服务器的数据目录。此外,将主机目录(在此示例中为 /path-on-host-machine/backups/)挂载到容器中用于存储备份的存储文件夹(在示例中为 /data/backups)以持久保存我们正在创建的备份。以下是执行此步骤的示例命令,其中使用从 My Oracle Support 下载的 Docker 镜像启动 MySQL 企业版备份:
$> docker run \\
–mount type=bind,src=*/path-on-host-machine/datadir/*,dst=/var/lib/mysql \\
–mount type=bind,src=*/path-on-host-machine/backups/*,dst=/data/backups \\
–rm mysql/enterprise-server:8.0 \\
mysqlbackup -u*mysqlbackup* -p*password* –backup-dir=/tmp/backup-tmp –with-timestamp \\
–backup-image=/data/backups/db.mbi backup-to-image
[Entrypoint] MySQL Docker Image 8.0.11-1.1.5
MySQL Enterprise Backup version 8.0.11 Linux-4.1.12-61.1.16.el7uek.x86_64-x86_64 [2018-04-08 07:06:45]
Copyright (c) 2003, 2018, Oracle and/or its affiliates. All Rights Reserved.
180921 17:27:25 MAIN INFO: A thread created with Id \’140594390935680\’
180921 17:27:25 MAIN INFO: Starting with following command line …

————————————————————-
Parameters Summary
————————————————————-
Start LSN : 29615616
End LSN : 29651854
————————————————————-
mysqlbackup completed OK!
重要的是通过 mysqlbackup 的输出末尾检查备份是否已成功完成。
一旦备份作业完成,容器就会退出,并且使用 –rm 选项启动时,容器在退出后会被删除。已经创建了一个镜像备份,并且可以在最后一步挂载备份存储的主机目录中找到,如下所示:
$> ls /tmp/backups
db.mbi

要在 Docker 容器中使用 MySQL 企业版备份还原 MySQL 服务器实例,请按照这里列出的步骤进行操作:

停止 MySQL 服务器容器,这也会停止运行在其中的 MySQL 服务器:
docker stop mysqlserver
在主机上,删除 MySQL 服务器数据目录的绑定挂载中的所有内容:
rm -rf */path-on-host-machine/datadir*/*
使用 MySQL 企业版镜像启动一个容器,使用 MySQL 企业版备份命令 copy-back-and-apply-log 执行还原操作。像我们备份服务器时所做的那样,将服务器的数据目录和备份存储文件夹进行绑定挂载:
$> docker run \\
–mount type=bind,src=*/path-on-host-machine/datadir/*,dst=/var/lib/mysql \\
–mount type=bind,src=*/path-on-host-machine/backups/*,dst=/data/backups \\
–rm mysql/enterprise-server:8.0 \\
mysqlbackup –backup-dir=/tmp/backup-tmp –with-timestamp \\
–datadir=/var/lib/mysql –backup-image=/data/backups/db.mbi copy-back-and-apply-log
[Entrypoint] MySQL Docker Image 8.0.11-1.1.5
MySQL Enterprise Backup version 8.0.11 Linux-4.1.12-61.1.16.el7uek.x86_64-x86_64 [2018-04-08 07:06:45]
Copyright (c) 2003, 2018, Oracle and/or its affiliates. All Rights Reserved.
180921 22:06:52 MAIN INFO: A thread created with Id \’139768047519872\’
180921 22:06:52 MAIN INFO: Starting with following command line …

180921 22:06:52 PCR1 INFO: We were able to parse ibbackup_logfile up to
lsn 29680612.
180921 22:06:52 PCR1 INFO: Last MySQL binlog file position 0 155, file name binlog.000003
180921 22:06:52 PCR1 INFO: The first data file is \’/var/lib/mysql/ibdata1\’
and the new created log files are at \’/var/lib/mysql\’
180921 22:06:52 MAIN INFO: No Keyring file to process.
180921 22:06:52 MAIN INFO: Apply-log operation completed successfully.
180921 22:06:52 MAIN INFO: Full Backup has been restored successfully.
mysqlbackup completed OK! with 3 warnings
一旦备份作业完成,容器就会退出,并且使用 –rm 选项启动时,容器在退出后会被删除。
使用以下命令重新启动服务器容器,这也会重新启动已还原的服务器:
docker restart mysqlserver
或者,在还原的数据目录上启动一个新的 MySQL 服务器,如下所示:
docker run –name=mysqlserver2 \\
–mount type=bind,src=*/path-on-host-machine/datadir/*,dst=/var/lib/mysql \\
-d mysql/enterprise-server:8.0
登录服务器检查服务器是否正在运行并使用还原的数据。

使用 mysqldump 与 Docker

除了在 Docker 容器中运行的 MySQL 服务器使用 MySQL 企业版备份备份外,您还可以通过在 Docker 容器中运行的 mysqldump 实用程序执行逻辑备份。

以下说明假定您已经在 Docker 容器中运行了一个 MySQL 服务器,并且在容器首次启动时,已经将主机目录*/path-on-host-machine/datadir/*挂载到服务器的数据目录/var/lib/mysql上(有关详细信息,请参见将主机目录绑定到 MySQL 服务器数据目录上),该目录包含 Unix 套接字文件,通过该文件mysqldump和mysql可以连接到服务器。我们还假设,在服务器启动后,已经创建了一个具有适当权限(在本例中为admin)的用户,mysqldump可以使用该用户访问服务器。请使用以下步骤备份和恢复 MySQL 服务器数据:

使用 Docker 使用mysqldump备份 MySQL 服务器数据:

在运行 MySQL 服务器容器的同一主机上,启动另一个容器,其中包含 MySQL 服务器的镜像,以使用mysqldump实用程序执行备份(请参阅该实用程序的文档以了解其功能、选项和限制)。通过绑定挂载*/path-on-host-machine/datadir/提供对服务器数据目录的访问。此外,将主机目录(在本例中为/path-on-host-machine/backups/*)挂载到容器内用于存储备份的存储文件夹(在本例中使用/data/backups)以持久保存您创建的备份。以下是使用此设置备份服务器上所有数据库的示例命令:
$> docker run –entrypoint \”/bin/sh\” \\
–mount type=bind,src=*/path-on-host-machine/datadir/*,dst=/var/lib/mysql \\
–mount type=bind,src=*/path-on-host-machine/backups/*,dst=/data/backups \\
–rm container-registry.oracle.com/mysql/community-server:8.0 \\
-c \”mysqldump -u*admin* –password=\’*password*\’ –all-databases > /data/backups/all-databases.sql\”
在命令中,使用–entrypoint选项启动容器后调用系统 shell,并使用-c选项指定要在 shell 中运行的mysqldump命令,其输出被重定向到备份目录中的文件all-databases.sql。
一旦备份作业完成,容器就会退出,并且使用–rm选项启动后,容器在退出后将被删除。已创建了一个逻辑备份,并且可以在用于存储备份的主机目录中找到,如下所示:
$> ls */path-on-host-machine/backups/*
all-databases.sql

使用 Docker 使用mysqldump恢复 MySQL 服务器数据:

确保您在容器中运行了一个 MySQL 服务器,您希望将备份数据还原到该服务器上。
启动一个包含 MySQL 服务器镜像的容器,使用mysql客户端执行恢复操作。绑定挂载服务器的数据目录,以及包含您备份的存储文件夹:
$> docker run \\
–mount type=bind,src=*/path-on-host-machine/datadir/*,dst=/var/lib/mysql \\
–mount type=bind,src=*/path-on-host-machine/backups/*,dst=/data/backups \\
–rm container-registry.oracle.com/mysql/community-server:8.0 \\
mysql -u*admin* –password=\’*password*\’ -e \”source /data/backups/all-databases.sql\”
一旦备份作业完成,容器就会退出,并且在启动时使用–rm选项后,容器在退出后会被删除。
登录服务器检查已恢复的数据是否已在服务器上。

已知问题

当使用服务器系统变量audit_log_file来配置审计日志文件名时,请使用loose 选项修饰符;否则,Docker 无法启动服务器。

Docker 环境变量

当创建 MySQL 服务器容器时,可以使用–env选项(简写为-e)并指定一个或多个环境变量来配置 MySQL 实例。如果挂载的数据目录不为空,则不会执行服务器初始化,在这种情况下设置这些变量之一也没有效果(参见持久化数据和配置更改),并且在容器启动期间不会修改目录的任何现有内容,包括服务器设置。

可用于配置 MySQL 实例的环境变量列在这里:

包括MYSQL_RANDOM_ROOT_PASSWORD、MYSQL_ONETIME_PASSWORD、MYSQL_ALLOW_EMPTY_PASSWORD和MYSQL_LOG_CONSOLE在内的布尔变量通过将它们设置为任何非零长度的字符串来设为真。因此,将它们设置为“0”、“false”或“no”并不会使它们为假,而实际上会使它们为真。这是一个已知问题。
MYSQL_RANDOM_ROOT_PASSWORD:当此变量为真时(这是其默认状态,除非设置了MYSQL_ROOT_PASSWORD或MYSQL_ALLOW_EMPTY_PASSWORD为真),在启动 Docker 容器时会为服务器的 root 用户生成一个随机密码。密码会打印到容器的stdout中,并且可以通过查看容器的日志(参见启动 MySQL 服务器实例)找到。
MYSQL_ONETIME_PASSWORD: 当该变量为 true(这是默认状态,除非设置了MYSQL_ROOT_PASSWORD或MYSQL_ALLOW_EMPTY_PASSWORD为 true),root 用户的密码将被设置为过期,必须在 MySQL 可以正常使用之前更改。
MYSQL_DATABASE: 此变量允许您在镜像启动时指定要创建的数据库的名称。如果使用MYSQL_USER和MYSQL_PASSWORD提供了用户名和密码,则将创建用户并授予该数据库的超级用户访问权限(对应于GRANT ALL)。指定的数据库是通过 CREATE DATABASE IF NOT EXIST 语句创建的,因此如果数据库已经存在,则该变量不起作用。
MYSQL_USER, MYSQL_PASSWORD: 这些变量一起用于创建用户并设置该用户的密码,用户被授予指定由MYSQL_DATABASE变量的数据库的超级用户权限。要创建用户,MYSQL_USER和MYSQL_PASSWORD都是必需的 – 如果两个变量中的任何一个未设置,则另一个将被忽略。如果两个变量都设置了但MYSQL_DATABASE没有设置,则创建用户时不授予任何权限。
注意
不需要使用此机制来创建默认情况下使用MYSQL_ROOT_PASSWORD和MYSQL_RANDOM_ROOT_PASSWORD中讨论的任一机制设置密码的根超级用户,除非MYSQL_ALLOW_EMPTY_PASSWORD为 true。
MYSQL_ROOT_HOST:默认情况下,MySQL 创建\’root\’@\’localhost\’帐户。此帐户只能从容器内部连接,如从容器内部连接到 MySQL 服务器中所述。要允许来自其他主机的 root 连接,请设置此环境变量。例如,值172.17.0.1,这是默认的 Docker 网关 IP,允许来自运行容器的主机机器的连接。该选项只接受一个条目,但允许使用通配符(例如,MYSQL_ROOT_HOST=172.*.*.*或MYSQL_ROOT_HOST=%)。
MYSQL_LOG_CONSOLE:当变量为 true(对于 MySQL 8.0 服务器容器而言,这是其默认状态)时,MySQL 服务器的错误日志被重定向到stderr,因此错误日志进入 Docker 容器的日志,并且可以使用**docker logs *mysqld-container***命令查看。
注意
如果主机已挂载服务器配置文件(参见 Persisting Data and Configuration Changes 中的绑定挂载配置文件),则该变量不起作用。
MYSQL_ROOT_PASSWORD:此变量指定为 MySQL root 帐户设置的密码。
警告
在命令行上设置 MySQL root 用户密码是不安全的。作为明确指定密码的替代方案,您可以设置一个容器文件路径的变量,用于密码文件,然后挂载来自主机的包含密码的文件到容器文件路径。这仍然不是非常安全的,因为密码文件的位置仍然暴露。最好使用MYSQL_RANDOM_ROOT_PASSWORD和MYSQL_ONETIME_PASSWORD的默认设置,两者都设置为 true。
MYSQL_ALLOW_EMPTY_PASSWORD。将其设置为 true 以允许使用空密码启动容器以用于 root 用户。
警告
将此变量设置为 true 是不安全的,因为它将使您的 MySQL 实例完全无保护,允许任何人获得完全的超级用户访问权限。最好使用MYSQL_RANDOM_ROOT_PASSWORD和MYSQL_ONETIME_PASSWORD的默认设置,两者都设置为 true。

原文:dev.mysql.com/doc/refman/8.0/en/deploy-mysql-nonlinux-docker.html

2.5.6.3 在 Windows 和其他非 Linux 平台上使用 Docker 部署 MySQL

警告

Oracle 提供的 MySQL Docker 镜像专为 Linux 平台构建。其他平台不受支持,使用 Oracle 提供的 MySQL Docker 镜像在这些平台上运行属于自担风险。本节讨论了在非 Linux 平台上使用这些镜像时的一些已知问题。

使用 Oracle 在 Windows 上的 MySQL 服务器 Docker 镜像存在以下已知问题:

如果您在容器的 MySQL 数据目录上进行绑定挂载(详见持久化数据和配置更改),您必须使用 –socket 选项将服务器套接字文件的位置设置在 MySQL 数据目录之外的某个地方;否则,服务器将无法启动。这是因为 Docker for Windows 处理文件挂载的方式不允许将主机文件绑定挂载到套接字文件上。

2.5.7 在 Linux 上从本地软件仓库安装 MySQL

原文:dev.mysql.com/doc/refman/8.0/en/linux-installation-native.html

许多 Linux 发行版在其本地软件仓库中包含 MySQL 服务器、客户端工具和开发组件的版本,并可以使用平台的标准软件包管理系统进行安装。本节提供了使用这些软件包管理系统安装 MySQL 的基本说明。

重要

本地软件包通常落后于当前可用版本。通常无法安装开发里程碑版本(DMR),因为这些版本通常不会在本地仓库中提供。在继续之前,我们建议您查看 Section 2.5, “在 Linux 上安装 MySQL”中描述的其他安装选项。

下面显示了特定于发行版的说明:

Red Hat Linux, Fedora, CentOS
注意
对于许多 Linux 发行版,您可以使用 MySQL Yum 仓库而不是平台的本地软件仓库来安装 MySQL。有关详细信息,请参阅 Section 2.5.1, “使用 MySQL Yum 仓库在 Linux 上安装 MySQL”。
对于 Red Hat 和类似的发行版,MySQL 分发为多个单独的软件包,mysql 用于客户端工具,mysql-server 用于服务器和相关工具,mysql-libs 用于库。如果您希望从不同的语言和环境(如 Perl、Python 等)提供连接,则需要这些库。
要安装,请使用yum命令指定要安装的软件包。例如:
#> yum install mysql mysql-server mysql-libs mysql-server
Loaded plugins: presto, refresh-packagekit
Setting up Install Process
Resolving Dependencies
–> Running transaction check
—> Package mysql.x86_64 0:5.1.48-2.fc13 set to be updated
—> Package mysql-libs.x86_64 0:5.1.48-2.fc13 set to be updated
—> Package mysql-server.x86_64 0:5.1.48-2.fc13 set to be updated
–> Processing Dependency: perl-DBD-MySQL for package: mysql-server-5.1.48-2.fc13.x86_64
–> Running transaction check
—> Package perl-DBD-MySQL.x86_64 0:4.017-1.fc13 set to be updated
–> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
mysql x86_64 5.1.48-2.fc13 updates 889 k
mysql-libs x86_64 5.1.48-2.fc13 updates 1.2 M
mysql-server x86_64 5.1.48-2.fc13 updates 8.1 M
Installing for dependencies:
perl-DBD-MySQL x86_64 4.017-1.fc13 updates 136 k
Transaction Summary
================================================================================
Install 4 Package(s)
Upgrade 0 Package(s)
Total download size: 10 M
Installed size: 30 M
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
Processing delta metadata
Package(s) data still to download: 10 M
(1/4): mysql-5.1.48-2.fc13.x86_64.rpm | 889 kB 00:04
(2/4): mysql-libs-5.1.48-2.fc13.x86_64.rpm | 1.2 MB 00:06
(3/4): mysql-server-5.1.48-2.fc13.x86_64.rpm | 8.1 MB 00:40
(4/4): perl-DBD-MySQL-4.017-1.fc13.x86_64.rpm | 136 kB 00:00
——————————————————————————–
Total 201 kB/s | 10 MB 00:52
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : mysql-libs-5.1.48-2.fc13.x86_64 1/4
Installing : mysql-5.1.48-2.fc13.x86_64 2/4
Installing : perl-DBD-MySQL-4.017-1.fc13.x86_64 3/4
Installing : mysql-server-5.1.48-2.fc13.x86_64 4/4
Installed:
mysql.x86_64 0:5.1.48-2.fc13 mysql-libs.x86_64 0:5.1.48-2.fc13
mysql-server.x86_64 0:5.1.48-2.fc13
Dependency Installed:
perl-DBD-MySQL.x86_64 0:4.017-1.fc13
Complete!
MySQL 和 MySQL 服务器现在应该已安装。一个示例配置文件被安装到/etc/my.cnf。要启动 MySQL 服务器,请使用systemctl:
$> systemctl start mysqld
如果数据库表尚不存在,系统会自动为您创建这些表。但是,您应该运行mysql_secure_installation来设置服务器的 root 密码。
Debian, Ubuntu, Kubuntu
注意
对于支持的 Debian 和 Ubuntu 版本,可以使用MySQL APT 仓库来安装 MySQL,而不是使用平台的本地软件仓库。有关详细信息,请参阅 Section 2.5.2, “使用 MySQL APT 仓库在 Linux 上安装 MySQL”。
在 Debian 及相关发行版中,他们的软件仓库中有两个 MySQL 软件包,mysql-client和mysql-server,分别用于客户端和服务器组件。您应该指定一个明确的版本,例如mysql-client-5.1,以确保安装您想要的 MySQL 版本。
要下载和安装,包括任何依赖项,请使用apt-get命令,指定您想要安装的软件包。
注意
在安装之前,请确保更新您的apt-get索引文件,以确保您下载的是最新版本。
注意
apt-get命令安装了许多软件包,包括 MySQL 服务器,以提供典型的工具和应用环境。这意味着除了主要的 MySQL 软件包外,您可能还会安装大量软件包。
在安装过程中,会创建初始数据库,并提示您输入 MySQL root 密码(以及确认密码)。在/etc/mysql/my.cnf中创建配置文件。在/etc/init.d/mysql中创建初始化脚本。
服务器应该已经启动。您可以使用以下命令手动启动和停止服务器:
#> service mysql [start|stop]
该服务会自动添加到 2、3 和 4 运行级别,并在单个、关机和重启级别中添加停止脚本。

2.5.8 在 Linux 上使用 Juju 安装 MySQL

原文:dev.mysql.com/doc/refman/8.0/en/linux-installation-juju.html

Juju 部署框架支持简单安装和配置 MySQL 服务器。具体操作说明,请参见jujucharms.com/mysql/。

2.5.9 使用 systemd 管理 MySQL 服务器

原文:dev.mysql.com/doc/refman/8.0/en/using-systemd.html

如果您在以下 Linux 平台上使用 RPM 或 Debian 软件包安装 MySQL,则服务器的启动和关闭由 systemd 管理:

RPM 软件包平台:

企业 Linux 变体版本 7 及更高版本
SUSE Linux Enterprise Server 12 及更高版本
Fedora 29 及更高版本
Debian 家族平台:

Debian 平台
Ubuntu 平台

如果您在使用 systemd 的平台上从通用二进制发行版安装 MySQL,则可以按照 MySQL 8.0 安全部署指南中提供的后安装设置部分的说明手动配置 MySQL 的 systemd 支持。

如果您在使用 systemd 的平台上从源代码发行版安装 MySQL,则可以通过使用 -DWITH_SYSTEMD=1 CMake 选项配置发行版以获得 MySQL 的 systemd 支持。请参阅第 2.8.7 节,“MySQL 源代码配置选项”。

以下讨论涵盖了这些主题:

systemd 概述
为 MySQL 配置 systemd
使用 systemd 配置多个 MySQL 实例
从 mysqld_safe 迁移到 systemd

注意

在为 MySQL 安装了 systemd 支持的平台上,诸如mysqld_safe和 System V 初始化脚本等脚本是不必要的,也不会被安装。例如,mysqld_safe可以处理服务器重启,但 systemd 提供了相同的功能,并且以与其他服务管理一致的方式进行,而不是使用特定于应用程序的程序。

在使用 systemd 进行服务器管理的平台上不使用mysqld_safe的一个影响是,不支持在选项文件中使用 [mysqld_safe] 或 [safe_mysqld] 部分,可能会导致意外行为。

因为 systemd 在安装了 MySQL systemd 支持的平台上具有管理多个 MySQL 实例的能力,所以mysqld_multi和 mysqld_multi.server 是不必要的,也不会被安装。

systemd 概述

systemd 提供自动 MySQL 服务器启动和关闭。它还通过systemctl命令启用手动服务器管理。例如:

$> systemctl *{start|stop|restart|status}* mysqld

或者,使用service命令(参数颠倒),该命令与 System V 系统兼容:

$> service mysqld *{start|stop|restart|status}*

注意

对于systemctl命令(以及替代的service命令),如果 MySQL 服务名称不是mysqld,则使用适当的名称。例如,在基于 Debian 和 SLES 系统上使用mysql而不是mysqld。

systemd 的支持包括这些文件:

mysqld.service(RPM 平台),mysql.service(Debian 平台):systemd 服务单元配置文件,包含有关 MySQL 服务的详细信息。
mysqld@.service(RPM 平台),mysql@.service(Debian 平台):类似于mysqld.service或mysql.service,但用于管理多个 MySQL 实例。
mysqld.tmpfiles.d:包含支持tmpfiles功能信息的文件。此文件安装为mysql.conf。
mysqld_pre_systemd(RPM 平台),mysql-system-start(Debian 平台):单元文件的支持脚本。此脚本仅在错误日志位置匹配模式(对于 RPM 平台为/var/log/mysql*.log,对于 Debian 平台为/var/log/mysql/*.log)时协助创建错误日志文件。在其他情况下,错误日志目录必须可写,或者错误日志必须存在并对运行mysqld进程的用户可写。

配置 MySQL 的 systemd

要为 MySQL 添加或更改 systemd 选项,可以使用以下方法:

使用本地化的 systemd 配置文件。
安排 systemd 为 MySQL 服务器进程设置环境变量。
设置MYSQLD_OPTS systemd 变量。

要使用本地化的 systemd 配置文件,请创建/etc/systemd/system/mysqld.service.d目录(如果不存在)。在该目录中,创建一个包含列出所需设置的[Service]部分的文件。例如:

[Service]
LimitNOFILE=*max_open_files*
Nice=*nice_level*
LimitCore=*core_file_limit*
Environment=\”LD_PRELOAD=*/path/to/malloc/library*\”
Environment=\”TZ=*time_zone_setting*\”

此处讨论使用override.conf作为此文件的名称。较新版本的 systemd 支持以下命令,该命令打开编辑器并允许您编辑文件:

systemctl edit mysqld # RPM platforms
systemctl edit mysql # Debian platforms

每当创建或更改override.conf时,重新加载 systemd 配置,然后告诉 systemd 重新启动 MySQL 服务:

systemctl daemon-reload
systemctl restart mysqld # RPM platforms
systemctl restart mysql # Debian platforms

对于某些参数,必须使用override.conf配置方法,而不是在 MySQL 选项文件的[mysqld]、[mysqld_safe]或[safe_mysqld]组中的设置:

对于某些参数,必须使用override.conf,因为 systemd 本身必须知道它们的值,而不能读取 MySQL 选项文件来获取它们。
指定值的参数,否则只能使用已知于mysqld_safe的选项设置,必须使用 systemd 指定,因为没有对应的mysqld参数。

有关使用 systemd 而不是mysqld_safe的更多信息,请参阅从 mysqld_safe 迁移到 systemd。

您可以在override.conf中设置以下参数:

要设置 MySQL 服务器可用的文件描述符数量,请在override.conf中使用LimitNOFILE,而不是mysqld的open_files_limit系统变量或mysqld_safe的–open-files-limit选项。
要设置最大核心文件大小,请在override.conf中使用LimitCore,而不是–core-file-size选项用于mysqld_safe。
要为 MySQL 服务器设置调度优先级,请在override.conf中使用Nice,而不是–nice选项用于mysqld_safe。

一些 MySQL 参数使用环境变量进行配置:

LD_PRELOAD: 如果 MySQL 服务器应该使用特定的内存分配库,请设置此变量。
NOTIFY_SOCKET: 此环境变量指定mysqld用于与 systemd 通信启动完成和服务状态更改通知的套接字。当启动mysqld服务时,systemd 会设置它。mysqld服务读取变量设置并写入定义的位置。
在 MySQL 8.0 中,mysqld使用Type=notify进程启动类型。 (MySQL 5.7 中使用Type=forking。)使用Type=notify,systemd 会自动配置套接字文件并导出路径到NOTIFY_SOCKET环境变量。
TZ: 设置此变量以指定服务器的默认时区。

有多种方法可以指定由 systemd 管理的 MySQL 服务器进程使用的环境变量值:

在override.conf文件中使用Environment行。有关语法,请参见前面讨论中描述如何使用此文件的示例。
在/etc/sysconfig/mysql文件中指定值(如果不存在,请创建该文件)。使用以下语法分配值:
LD_PRELOAD=*/path/to/malloc/library*
TZ=*time_zone_setting*
修改/etc/sysconfig/mysql后,重新启动服务器以使更改生效:
systemctl restart mysqld # RPM platforms
systemctl restart mysql # Debian platforms

要为mysqld指定选项而不直接修改 systemd 配置文件,请设置或取消设置MYSQLD_OPTS systemd 变量。例如:

systemctl set-environment MYSQLD_OPTS=\”–general_log=1\”
systemctl unset-environment MYSQLD_OPTS

MYSQLD_OPTS 也可以在 /etc/sysconfig/mysql 文件中设置。

修改 systemd 环境后,重新启动服务器以使更改生效:

systemctl restart mysqld # RPM platforms
systemctl restart mysql # Debian platforms

对于使用 systemd 的平台,如果数据目录在服务器启动时为空,则会初始化数据目录。如果数据目录是一个暂时消失的远程挂载点,这可能会成为一个问题:挂载点看起来像一个空的数据目录,然后会被初始化为一个新的数据目录。要抑制此自动初始化行为,请在 /etc/sysconfig/mysql 文件中指定以下行(如果文件不存在,请创建文件):

NO_INIT=true

使用 systemd 配置多个 MySQL 实例

本节描述了如何为多个 MySQL 实例配置 systemd。

注意

因为 systemd 在安装了 systemd 支持的平台上具有管理多个 MySQL 实例的能力,所以 mysqld_multi 和 mysqld_multi.server 是不必要的,也不会安装。

要使用多实例功能,修改 my.cnf 选项文件以包含每个实例的关键选项配置。这些文件位置通常如下:

/etc/my.cnf 或 /etc/mysql/my.cnf(RPM 平台)
/etc/mysql/mysql.conf.d/mysqld.cnf(Debian 平台)

例如,要管理名为 replica01 和 replica02 的两个实例,请在选项文件中添加类似以下内容:

RPM 平台:

[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysqld-replica01.log
[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysqld-replica02.log

Debian 平台:

[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysql/replica01.log
[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysql/replica02.log

这里显示的副本名称使用 @ 作为分隔符,因为这是 systemd 支持的唯一分隔符。

然后实例将由正常的 systemd 命令管理,例如:

systemctl start mysqld@replica01
systemctl start mysqld@replica02

要在启动时启用实例运行,请执行以下操作:

systemctl enable mysqld@replica01
systemctl enable mysqld@replica02

也支持使用通配符。例如,以下命令显示所有副本实例的状态:

systemctl status \’mysqld@replica*\’

对于在同一台机器上管理多个 MySQL 实例,systemd 自动使用不同的单元文件:

mysqld@.service 而不是 mysqld.service(RPM 平台)
mysql@.service 而不是 mysql.service(Debian 平台)

在单元文件中,%I 和 %i 引用在 @ 标记后传递的参数,并用于管理特定实例。对于这样的命令:

systemctl start mysqld@replica01

systemd 使用类似以下命令启动服务器:

mysqld –defaults-group-suffix=@%I …

结果是 [server]、[mysqld] 和 [mysqld@replica01] 选项组将被读取并用于该服务的实例。

注意

在 Debian 平台上,AppArmor 阻止服务器读取或写入 /var/lib/mysql-replica*,或者除了默认位置之外的任何其他位置。要解决这个问题,您必须自定义或禁用 /etc/apparmor.d/usr.sbin.mysqld 中的配置文件。

注意

在 Debian 平台上,MySQL 卸载的打包脚本目前无法处理 mysqld@ 实例。在删除或升级软件包之前,您必须首先手动停止任何额外的实例。

从 mysqld_safe 迁移到 systemd

因为在使用 systemd 管理 MySQL 的平台上没有安装 mysqld_safe,先前为该程序指定的选项(例如,在 [mysqld_safe] 或 [safe_mysqld] 选项组中)必须以另一种方式指定:

一些 mysqld_safe 选项也被 mysqld 理解,并且可以从 [mysqld_safe] 或 [safe_mysqld] 选项组移动到 [mysqld] 组。这不包括 –pid-file,–open-files-limit,或 –nice。要指定这些选项,请使用之前描述的 override.conf systemd 文件。
注意
在 systemd 平台上,不支持使用 [mysqld_safe] 和 [safe_mysqld] 选项组,并且可能导致意外行为。
对于一些 mysqld_safe 选项,有替代的 mysqld 过程。例如,启用 syslog 记录的 mysqld_safe 选项是 –syslog,已被弃用。要将错误日志输出写入系统日志,请使用 Section 7.4.2.8, “Error Logging to the System Log” 中的说明。
mysqld_safe 不理解的选项可以在 override.conf 或环境变量中指定。例如,使用 mysqld_safe,如果服务器应该使用特定的内存分配库,则使用 –malloc-lib 选项指定。对于使用 systemd 管理服务器的安装,安排设置 LD_PRELOAD 环境变量,如之前描述的那样。

2.6 使用 Unbreakable Linux Network (ULN) 安装 MySQL

原文:dev.mysql.com/doc/refman/8.0/en/uln-installation.html

Linux 支持多种不同的解决方案来安装 MySQL,详见 第 2.5 节,“在 Linux 上安装 MySQL”。其中一种方法在本节中介绍,即从 Oracle 的 Unbreakable Linux Network (ULN) 安装。您可以在 linux.oracle.com/ 下找到有关 Oracle Linux 和 ULN 的信息。

要使用 ULN,您需要获取 ULN 登录并将用于安装的机器注册到 ULN。这在 ULN FAQ 中有详细描述。该页面还描述了如何安装和更新软件包。

社区和商业软件包都得到支持,每个都提供三个 MySQL 频道:

服务器:MySQL 服务器
连接器:MySQL Connector/C++、MySQL Connector/J、MySQL Connector/ODBC 和 MySQL Connector/Python。
工具:MySQL Router、MySQL Shell 和 MySQL Workbench

社区频道对所有 ULN 用户都是可用的。

访问 oracle.linux.com 上的商业 MySQL ULN 软件包需要您提供具有有效商业许可证的 MySQL CSI(企业版或标准版)。截至目前,有效购买订单号为 60944、60945、64911 和 64912。适当的 CSI 会在 ULN GUI 界面中提供商业 MySQL 订阅频道。

一旦使用 ULN 安装了 MySQL,您可以在 第 2.5.7 节,“从本机软件库在 Linux 上安装 MySQL” 中找到有关启动和停止服务器等信息,特别是在 第 2.5.4 节,“使用来自 Oracle 的 RPM 软件包在 Linux 上安装 MySQL” 下。

如果您要将软件包源更改为使用 ULN,但不更改使用的 MySQL 构建版本,则请备份数据,删除现有的二进制文件,并用 ULN 中的文件替换它们。如果涉及到更改构建版本,我们建议备份为转储文件(mysqldump 或 mysqlpump 或来自 MySQL Shell 的备份实用程序),以防您需要在新的二进制文件放置后重���数据。如果这次转向 ULN 跨越了版本边界,请在继续之前参考本节:第三章,升级 MySQL。

注意

Oracle Linux 8 从 MySQL 8.0.17 开始得到支持,社区工具和连接器频道是在 MySQL 8.0.24 发布时添加的。

2.7 在 Solaris 上安装 MySQL

原文:dev.mysql.com/doc/refman/8.0/en/solaris-installation.html

2.7.1 在 Solaris 上使用 Solaris PKG 安装 MySQL

注意

MySQL 8.0 支持 Solaris 11.4 及更高版本

Solaris 上的 MySQL 有多种不同的格式可用。

有关使用本机 Solaris PKG 格式安装的信息,请参阅第 2.7.1 节,“在 Solaris 上使用 Solaris PKG 安装 MySQL”。
要使用标准的 tar 二进制安装,请使用第 2.2 节,“在 Unix/Linux 上使用通用二进制文件安装 MySQL”中提供的注意事项。在安装之前或之后,查看本节末尾的 Solaris 特定注意事项。

注意

MySQL 5.7 依赖于 Oracle Developer Studio Runtime Libraries;但这不适用于 MySQL 8.0。

要获取 Solaris 的二进制 MySQL 分发包(tarball 或 PKG 格式),请访问dev.mysql.com/downloads/mysql/8.0.html。

在 Solaris 上安装和使用 MySQL 时需要注意的其他事项:

如果想要使用 mysql 用户和组来运行 MySQL,请使用 groupadd 和 useradd 命令:
groupadd mysql
useradd -g mysql -s /bin/false mysql
如果在 Solaris 上使用二进制 tarball 分发安装 MySQL,因为 Solaris 的 tar 无法处理长文件名,请使用 GNU tar (gtar) 解压分发包。如果你的系统上没有 GNU tar,请使用以下命令安装:
pkg install archiver/gnu-tar
你应该使用forcedirectio选项挂载任何你打算存储 InnoDB 文件的文件系统。(默认情况下,挂载是不带此选项的。)如果不这样做,在这个平台上使用 InnoDB 存储引擎时会导致性能显著下降。
如果希望 MySQL 自动启动,可以将 support-files/mysql.server 复制到 /etc/init.d 并创建一个名为 /etc/rc3.d/S99mysql.server 的符号链接。
如果有太多进程试图非常快速地连接到mysqld,你应该在 MySQL 日志中看到这个错误:
Error in accept: Protocol error
你可以尝试使用–back_log=50选项作为解决此问题的临时方法。
要在 Solaris 上配置核心文件的生成,应该使用 coreadm 命令。由于在 setuid() 应用程序上生成核心文件的安全性影响,默认情况下,Solaris 不支持 setuid() 程序的核心文件。但是,你可��使用 coreadm 修改这种行为。如果为当前用户启用 setuid() 核心文件,它们将以 600 模式生成,并由超级用户拥有。

2.7.1 在 Solaris 上使用 Solaris PKG 安装 MySQL

原文:dev.mysql.com/doc/refman/8.0/en/solaris-installation-pkg.html

您可以使用本机 Solaris PKG 格式的二进制软件包安装 MySQL,而不是使用二进制 tarball 分发。

注意

MySQL 5.7 依赖于 Oracle Developer Studio Runtime Libraries;但这不适用于 MySQL 8.0。

要使用此软件包,请下载相应的mysql-VERSION-solaris11-PLATFORM.pkg.gz文件,然后解压缩它。例如:

$> gunzip mysql-*8.0.36*-solaris11-x86_64.pkg.gz

要安装新软件包,请使用pkgadd并按照屏幕提示操作。您必须具有 root 权限才能执行此���作:

$> pkgadd -d mysql-*8.0.36*-solaris11-x86_64.pkg
The following packages are available:
1 mysql MySQL Community Server (GPL)
(i86pc) 8.0.36
Select package(s) you wish to process (or \’all\’ to process
all packages). (default: all) [?,??,q]:

PKG 安装程序安装所有所需的文件和工具,然后初始化您的数据库(如果不存在)。要完成安装,您应该根据安装结束时提供的说明设置 MySQL 的 root 密码。或者,您可以运行随安装提供的mysql_secure_installation脚本。

默认情况下,PKG 软件包将 MySQL 安装在根路径/opt/mysql下。当使用pkgadd时,您只能更改安装根路径,该命令可用于在不同的 Solaris 区域中安装 MySQL。如果需要安装在特定目录中,请使用二进制tar文件分发。

pkg安装程序将适当的 MySQL 启动脚本复制到/etc/init.d/mysql中。为了使 MySQL 能够自动启动和关闭,您应该在此文件和 init 脚本目录之间创建链接。例如,为了确保 MySQL 的安全启动和关闭,您可以使用以下命令添加正确的链接:

$> ln /etc/init.d/mysql /etc/rc3.d/S91mysql
$> ln /etc/init.d/mysql /etc/rc0.d/K02mysql

要删除 MySQL,已安装的软件包名称为mysql。您可以结合pkgrm命令来删除安装。

使用 Solaris 软件包文件格式进行升级时,必须在安装更新软件包之前删除现有安装。卸载软件包不会删除现有的数据库信息,只会删除服务器、二进制文件和支持文件。因此,典型的升级顺序是:

$> mysqladmin shutdown
$> pkgrm mysql
$> pkgadd -d mysql-*8.0.36*-solaris11-x86_64.pkg
$> mysqld_safe &
$> mysql_upgrade # prior to MySQL 8.0.16 only

在执行任何升级之前,请查看第三章,升级 MySQL中的注意事项。

2.8 从源代码安装 MySQL

原文:dev.mysql.com/doc/refman/8.0/en/source-installation.html

2.8.1 源代码安装方法

2.8.2 源代码安装先决条件

2.8.3 源代码安装的 MySQL 布局

2.8.4 使用标准源代码发行版安装 MySQL

2.8.5 使用开发源代码树安装 MySQL

2.8.6 配置 SSL 库支持

2.8.7 MySQL 源代码配置选项

2.8.8 处理编译 MySQL 时的问题

2.8.9 MySQL 配置和第三方工具

2.8.10 生成 MySQL Doxygen 文档内容

从源代码构建 MySQL 可以让您自定义构建参数、编译器优化和安装位置。有关已知可运行 MySQL 的系统列表,请参阅 www.mysql.com/support/supportedplatforms/database.html。

在从源代码进行安装之前,请检查 Oracle 是否为您的平台提供了预编译的二进制发行版,并且它是否适合您使用。我们非常努力确保我们的二进制文件是使用最佳选项构建的,以获得最佳性能。有关安装二进制发行版的说明,请参阅第 2.2 节,“在 Unix/Linux 上使用通用二进制文件安装 MySQL”。

如果您有兴趣使用与 Oracle 在您的平台上生成二进制发行版时使用的构建选项相同或类似的源代码构建 MySQL,请获取一个二进制发行版,解压缩它,并查看 docs/INFO_BIN 文件,其中包含有关该 MySQL 发行版的配置和编译信息。

警告

使用非标准选项构建 MySQL 可能会导致功能、性能或安全性降低。

MySQL 源代码包含使用 Doxygen 编写的内部文档。生成的 Doxygen 内容可在 dev.mysql.com/doc/index-other.html 上找到。还可以使用 第 2.8.10 节,“生成 MySQL Doxygen 文档内容” 中的说明从 MySQL 源代码发行版本地生成此内容。

2.8.1 源码安装方法

原文:dev.mysql.com/doc/refman/8.0/en/source-installation-methods.html

有两种方法可以从源码安装 MySQL:

使用标准 MySQL 源码发行版。要获取标准发行版,请参阅第 2.1.3 节,“如何获取 MySQL”。有关从标准发行版构建的说明,请参阅第 2.8.4 节,“使用标准源码发行版安装 MySQL”。
标准发行版可作为压缩的tar文件、Zip 存档或 RPM 软件包提供。发行文件的名称形式为mysql-*VERSION*.tar.gz、mysql-*VERSION*.zip或mysql-*VERSION*.rpm,其中*VERSION*是一个类似8.0.36的数字。源码发行版的文件名可以通过源码发行版名称是通用的且不包含平台名称来与预编译二进制发行版的文件名区分开,而二进制发行版的文件名包含指示发行版面向的系统类型的平台名称(例如pc-linux-i686或winx64)。
使用 MySQL 开发树。有关从开发树构建的信息,请参阅第 2.8.5 节,“使用开发源树安装 MySQL”。

2.8.2 源码安装先决条件

原文:dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html

从源码安装 MySQL 需要几个开发工具。一些工具无论您使用标准源码分发还是开发源码树都是必需的。其他工具要求取决于您使用的安装方法。

要从源码安装 MySQL,必须满足以下系统要求,无论使用哪种安装方法:

CMake,用作所有平台上的构建框架。CMake 可从www.cmake.org下载。
一个良好的 make 程序。尽管一些平台自带其自己的 make 实现,但强烈建议使用 GNU make 3.75 或更高版本。它可能已经在您的系统上作为 gmake 可用。GNU make 可从www.gnu.org/software/make/获取。
在类 Unix 系统上,包括 Linux,在终端中可以通过以下方式检查系统的 make 版本:
$> make –version
GNU Make 4.2.1
从 MySQL 8.0.26 开始,MySQL 8.0 源码允许使用 C++17 特性。为了在所有支持的平台上启用必要的 C++17 支持级别,以下最低编译器版本适用:

Linux:GCC 10 或 Clang 5
macOS:XCode 10
Solaris:GCC 10
Windows:Visual Studio 2019
MySQL C API 需要 C++ 或 C99 编译器进行编译。
支持加密连接、随机数生成的熵以及其他与加密相关的操作需要 SSL 库。默认情况下,构建使用主机系统上安装的 OpenSSL 库。要显式指定库,请在调用 CMake 时使用 WITH_SSL 选项。有关更多信息,请参见第 2.8.6 节,“配置 SSL 库支持”。
构建 MySQL 需要 Boost C++ 库(但不需要使用它)。MySQL 编译需要特定的 Boost 版本。通常情况下,这是当前的 Boost 版本,但如果特定的 MySQL 源码分发需要不同的版本,则配置过程将停止,并显示需要的 Boost 版本。要获取 Boost 及其安装说明,请访问官方 Boost 网站。安装 Boost 后,根据在调用 CMake 时设置的 WITH_BOOST 选项的值,告诉构建系统 Boost 文件的放置位置。例如:
cmake . -DWITH_BOOST=/usr/local/boost_*version_number*
根据需要调整路径以匹配您的安装。
ncurses 库。
充足的空闲内存。如果在编译大型源文件时遇到内部编译器错误等构建错误,可能是内存太少了。如果在虚拟机上编译,请尝试增加内存分配。
如果你打算运行测试脚本,则需要 Perl。大多数类 Unix 系统都包含 Perl。对于 Windows,你可以使用ActiveState Perl或Strawberry Perl。

要从标准源分发安装 MySQL,需要以下工具之一来解压缩分发文件:

对于.tar.gz压缩的tar文件:使用 GNU gunzip解压分发文件,然后使用一个合理的tar来解压缩。如果你的tar程序支持z选项,它可以同时解压缩和解包文件。
GNU tar已知可用。某些操作系统提供的标准tar无法解压缩 MySQL 分发中的长文件名。你应该下载并安装 GNU tar,或者如果可用,使用预安装的 GNU tar 版本。通常这可作为gnutar、gtar或在 GNU 或自由软件目录中的tar,如/usr/sfw/bin或/usr/local/bin中找到。GNU tar可从www.gnu.org/software/tar/获取。
对于.zip Zip 归档文件:WinZip或其他能够读取.zip文件的工具。
对于.rpm RPM 软件包:用于构建分发的rpmbuild程序会解压缩它。

要从开发源代码树安装 MySQL,需要以下额外的工具:

Git 修订控制系统是获取开发源代码所必需的。GitHub 帮助提供了在不同平台上下载和安装 Git 的说明。
bison 2.1 或更高版本,可从www.gnu.org/software/bison/获取。(不再支持版本 1。)尽可能使用最新版本的bison;如果遇到问题,请升级到更高版本,而不是回退到早期版本。
bison可从www.gnu.org/software/bison/获取。Windows 上的bison可从gnuwin32.sourceforge.net/packages/bison.htm下载。下载标记为“Complete package, excluding sources”的软件包。在 Windows 上,bison的默认位置是C:\\Program Files\\GnuWin32目录。由于目录名中有空格,一些实用程序可能无法找到bison。此外,如果路径中有空格,Visual Studio 可能会简单地挂起。你可以通过安装到不包含空格的目录(例如C:\\GnuWin32)来解决这些问题。
在 Solaris Express 上,除了bison外,还必须安装m4。m4可从www.gnu.org/software/m4/获取。

注意

如果你需要安装任何程序,请修改你的PATH环境变量,包括程序所在的任何目录。参见第 6.2.9 节,“设置环境变量”。

如果遇到问题需要提交错误报告,请按照第 1.5 节,“如何报告错误或问题”中的说明。

2.8.3 MySQL 源安装布局

原文:dev.mysql.com/doc/refman/8.0/en/source-installation-layout.html

默认情况下,当您从源代码编译安装 MySQL 后,安装步骤会将文件安装在/usr/local/mysql目录下。安装目录下的组件位置与二进制发行版相同。请参阅表 2.3,“通用 Unix/Linux 二进制包的 MySQL 安装布局”,以及第 2.3.1 节,“Microsoft Windows 上的 MySQL 安装布局”。要配置与默认值不同的安装位置,请使用第 2.8.7 节,“MySQL 源配置选项”中描述的选项。

2.8.4 使用标准源分发安装 MySQL

原文:dev.mysql.com/doc/refman/8.0/en/installing-source-distribution.html

要从标准源分发安装 MySQL:

确保你的系统满足第 2.8.2 节,“安装源的先决条件”中列出的工具要求。
使用第 2.1.3 节,“如何获取 MySQL”中的说明获取分发文件。
使用本节中的说明配置、构建和安装分发。
使用第 2.9 节,“后安装设置和测试”中的说明执行后安装程序。

MySQL 在所有平台上使用CMake作为构建框架。这里给出的说明应该能帮助你生成一个可工作的安装。有关使用CMake构建 MySQL 的更多信息,请参见使用 CMake 构建 MySQL 服务器。

如果你从源码 RPM 开始,请使用以下命令生成一个二进制 RPM,以便安装。如果你没有rpmbuild,请使用rpm代替。

$> rpmbuild –rebuild –clean MySQL-*VERSION*.src.rpm

结果是一个或多个二进制 RPM 软件包,你可以按照第 2.5.4 节,“使用 Oracle 的 RPM 软件包在 Linux 上安装 MySQL”中的指示进行安装。

从压缩的tar文件或 Zip 存档源分发安装的顺序与从通用二进制分发安装的过程类似(参见第 2.2 节,“在 Unix/Linux 上使用通用二进制安装 MySQL”),只是它适用于所有平台,并包括配置和编译分发的步骤。例如,在 Unix 上使用压缩的tar文件源分发,基本安装命令顺序如下:

# Preconfiguration setup
$> groupadd mysql
$> useradd -r -g mysql -s /bin/false mysql
# Beginning of source-build specific instructions
$> tar zxvf mysql-*VERSION*.tar.gz
$> cd mysql-*VERSION*
$> mkdir bld
$> cd bld
$> cmake ..
$> make
$> make install
# End of source-build specific instructions
# Postinstallation setup
$> cd /usr/local/mysql
$> mkdir mysql-files
$> chown mysql:mysql mysql-files
$> chmod 750 mysql-files
$> bin/mysqld –initialize –user=mysql
$> bin/mysql_ssl_rsa_setup
$> bin/mysqld_safe –user=mysql &
# Next command is optional
$> cp support-files/mysql.server /etc/init.d/mysql.server

源码构建特定说明的更详细版本如下所示。

注意

此处显示的过程不设置任何 MySQL 帐户的密码。在按照此过程后,请继续到第 2.9 节,“后安装设置和测试”进行后安装设置和测试。

执行预配置设置
获取并解压分发
配置分发
构建分发
安装分发
执行安装后设置

执行预配置设置

在 Unix 系统上,设置拥有数据库目录并应用于运行和执行 MySQL 服务器的mysql用户,以及该用户所属的组。有关详细信息,请参见创建 mysql 用户和组。然后以mysql用户的身份执行以下步骤,除非另有说明。

获取并解压缩分发

选择要解压缩分发的目录,并更改位置进入其中。

使用第 2.1.3 节,“获取 MySQL”的说明获取分发文件。

将分发解压缩到当前目录:

要解压缩压缩的tar文件,如果支持z选项,tar可以解压缩和解包分发:
$> tar zxvf mysql-*VERSION*.tar.gz
如果您的tar不支持z选项,请使用gunzip解压缩分发,然后使用tar解包:
$> gunzip < mysql-*VERSION*.tar.gz | tar xvf –
或者,CMake可以解压缩和解包分发:
$> cmake -E tar zxvf mysql-*VERSION*.tar.gz
要解压缩 Zip 存档,请使用WinZip或另一个可以读取.zip文件的工具。

解压缩分发文件会创建一个名为mysql-*VERSION*的目录。

配置分发

将位置更改为解压缩分发的顶级目录:

$> cd mysql-*VERSION*

在源树之外构建以保持树的清洁。如果顶级源目录在您当前的工作目录下名为mysql-src,您可以在同一级别的一个名为build的目录中构建。创建该目录并进入其中:

$> mkdir bld
$> cd bld

配置构建目录。最小配置命令不包括任何选项以覆盖配置默认值:

$> cmake ../mysql-src

构建目录不需要在源树之外。例如,您可以在顶级源树下的名为build的目录中构建。为此,以mysql-src作为当前工作目录,创建目录build,然后进入该目录:

$> mkdir build
$> cd build

配置构建目录。最小配置命令不包括任何选项以覆盖配置默认值:

$> cmake ..

如果您在同一级别上有多个源树(例如,构建多个 MySQL 版本),第二种策略可能更有优势。第一种策略将所有构建目录放在同一级别,这要求您为每个目录选择一个唯一的名称。使用第二种策略,您可以在每个源树中使用相同的名称来构建目录。以下说明假定采用第二种策略。

在 Windows 上,指定开发环境。例如,以下命令分别为 32 位或 64 位构建配置 MySQL:

$> cmake .. -G \”Visual Studio 12 2013\”
$> cmake .. -G \”Visual Studio 12 2013 Win64\”

在 macOS 上,使用 Xcode IDE:

$> cmake .. -G Xcode

当你运行Cmake时,可能需要在命令行中添加选项。以下是一些示例:

-DBUILD_CONFIG=mysql_release: 使用 Oracle 用于生成官方 MySQL 发布的二进制分发的相同构建选项配置源代码。
-DCMAKE_INSTALL_PREFIX=*dir_name*: 配置安装在特定位置下的分发。
-DCPACK_MONOLITHIC_INSTALL=1: 使make package生成单个安装文件而不是多个文件。
-DWITH_DEBUG=1: 使用调试支持构建分发。

要获取更详尽的选项列表,请参见第 2.8.7 节“MySQL 源配置选项”。

要列出配置选项,请使用以下命令之一:

$> cmake .. -L # overview
$> cmake .. -LH # overview with help text
$> cmake .. -LAH # all params with help text
$> ccmake .. # interactive display

如果CMake失败,可能需要使用不同选项再次运行以重新配置。如果重新配置,请注意以下事项:

如果CMake在之前已经运行过后再次运行,可能会使用在之前调用期间收集的信息。这些信息存储在CMakeCache.txt中。当CMake启动时,它会查找该文件,并在假设信息仍然正确的情况下读取其内容。当你重新配置时,这种假设是无效的。
每次运行CMake后,必须再次运行make重新编译。但是,你可能需要先删除以前构建时使用不同配置选项编译的旧对象文件。

为了防止旧的对象文件或配置信息被使用,在 Unix 上重新运行CMake之前,在构建目录中运行以下命令:

$> make clean
$> rm CMakeCache.txt

或者,在 Windows 上:

$> devenv MySQL.sln /clean
$> del CMakeCache.txt

在向MySQL 社区 Slack询问之前,请检查CMakeFiles目录中的文件,以获取有关失败的有用信息。要提交错误报告,请使用第 1.5 节“如何报告错误或问题”中的说明。

构建分发

在 Unix 上:

$> make
$> make VERBOSE=1

第二个命令设置VERBOSE以显示每个编译源的命令。

在使用 GNU make并已安装为gmake的系统上,请改用gmake。

在 Windows 上:

$> devenv MySQL.sln /build RelWithDebInfo

如果您已经到了编译阶段,但分发包无法构建,请参阅第 2.8.8 节,“处理 MySQL 编译问题”以获取帮助。如果这不能解决问题,请按照第 1.5 节,“如何报告错误或问题”中的说明将问题输入到我们的错误数据库中。如果您已安装了所需工具的最新版本,但它们在尝试处理我们的配置文件时崩溃,请也报告这个问题。但是,如果您遇到command not found错误或类似的所需工具问题,请不要报告。相反,请确保所有所需工具都已安装,并且您的PATH变量设置正确,以便您的 shell 可以找到它们。

安装分发包

在 Unix 上:

$> make install

这将安装文件在配置的安装目录下(默认为/usr/local/mysql)。您可能需要以root身份运行命令。

要在特定目录中安装,请在命令行中添加一个DESTDIR参数:

$> make install DESTDIR=\”/opt/mysql\”

或者,生成安装包文件,您可以在喜欢的位置安装:

$> make package

此操作会生成一个或多个.tar.gz文件,可以像通用二进制分发包一样安装。请参阅第 2.2 节,“在 Unix/Linux 上使用通用二进制文件安装 MySQL”。如果使用-DCPACK_MONOLITHIC_INSTALL=1运行CMake,则该操作会生成一个单一文件。否则,它会生成多个文件。

在 Windows 上,生成数据目录,然后创建一个.zip归档安装包:

$> devenv MySQL.sln /build RelWithDebInfo /project initial_database
$> devenv MySQL.sln /build RelWithDebInfo /project package

您可以在喜欢的位置安装生成的.zip归档。请参阅第 2.3.4 节,“在 Microsoft Windows 上使用noinstall ZIP 归档安装 MySQL”。

执行后安装设置

安装过程的其余部分涉及设置配置文件,创建核心数据库和启动 MySQL 服务器。有关说明,请参阅第 2.9 节,“后安装设置和测试”。

注意

最初列在 MySQL 授权表中的帐户没有密码。启动服务器后,您应该使用第 2.9 节,“后安装设置和测试”中的说明为它们设置密码。

2.8.5 使用开发源树安装 MySQL

原文:dev.mysql.com/doc/refman/8.0/en/installing-development-tree.html

本节描述了如何从托管在 GitHub 上的最新开发源代码安装 MySQL。要从这个仓库托管服务获取 MySQL Server 源代码,您可以设置一个本地 MySQL Git 仓库。

在 GitHub 上,MySQL Server 和其他 MySQL 项目可以在 MySQL 页面找到。MySQL Server 项目是一个包含多个 MySQL 系列分支的单个仓库。

从开发源安装的先决条件
设置 MySQL Git 仓库

从开发源安装的先决条件

要从开发源树安装 MySQL,您的系统必须满足第 2.8.2 节,“源码安装先决条件”中列出的工具要求。

设置 MySQL Git 仓库

要在您的计算机上设置一个 MySQL Git 仓库:

将 MySQL Git 仓库克隆到您的计算机上。以下命令将 MySQL Git 仓库克隆到一个名为 mysql-server 的目录中。初始下载可能需要一些时间才能完成,这取决于您的连接速度。
$> git clone https://github.com/mysql/mysql-server.git
Cloning into \’mysql-server\’…
remote: Counting objects: 1198513, done.
remote: Total 1198513 (delta 0), reused 0 (delta 0), pack-reused 1198513
Receiving objects: 100% (1198513/1198513), 1.01 GiB | 7.44 MiB/s, done.
Resolving deltas: 100% (993200/993200), done.
Checking connectivity… done.
Checking out files: 100% (25510/25510), done.
克隆操作完成后,您本地的 MySQL Git 仓库的内容会类似于以下内容:
~> cd mysql-server
~/mysql-server> ls
client extra mysys storage
cmake include packaging strings
CMakeLists.txt INSTALL plugin support-files
components libbinlogevents README testclients
config.h.cmake libchangestreams router unittest
configure.cmake libmysql run_doxygen.cmake utilities
Docs libservices scripts VERSION
Doxyfile-ignored LICENSE share vio
Doxyfile.in man sql win
doxygen_resources mysql-test sql-common
使用 git branch -r 命令查看 MySQL 仓库的远程跟踪分支。
~/mysql-server> git branch -r
origin/5.7
origin/8.0
origin/HEAD -> origin/trunk
origin/cluster-7.4
origin/cluster-7.5
origin/cluster-7.6
origin/trunk
要查看本地仓库中检出的分支,请发出 git branch 命令。当您克隆 MySQL Git 仓库时,最新的 MySQL 分支会自动检出。星号标识活动分支。
~/mysql-server$ git branch
* trunk
要检出较早的 MySQL 分支,请运行 git checkout 命令,并指定分支名称。例如,要检出 MySQL 5.7 分支:
~/mysql-server$ git checkout 5.7
Checking out files: 100% (9600/9600), done.
Branch 5.7 set up to track remote branch 5.7 from origin.
Switched to a new branch \’5.7\’
要获取在初始设置 MySQL Git 仓库后进行的更改,请切换到要更新的分支并发出 git pull 命令:
~/mysql-server$ git checkout 8.0
~/mysql-server$ git pull
要查看提交历史,请使用 git log 命令:
~/mysql-server$ git log
您还可以在 GitHub 的 MySQL 网站上浏览提交历史和源代码。
如果您看到有变化或代码有疑问的地方,请在 MySQL Community Slack 上提问。
在克隆了 MySQL Git 仓库并检出了要构建的分支后,您可以从源代码构建 MySQL 服务器。有关说明,请参阅第 2.8.4 节,“使用标准源分发安装 MySQL”,不过您可以跳过获取和解压分发的部分。
在生产机器上小心安装来自分发源代码树的构建。安装命令可能会覆盖您的实时发布安装。如果您已经安装了 MySQL 并且不想覆盖它,请使用与生产服务器不同的值运行CMake,分别为CMAKE_INSTALL_PREFIX、MYSQL_TCP_PORT和MYSQL_UNIX_ADDR选项。有关防止多个服务器相互干扰的其他信息,请参见第 7.8 节,“在一台机器上运行多个 MySQL 实例”。
通过您的新安装来进行严格测试。例如,尝试让新功能崩溃。首先运行make test。请参阅 MySQL 测试套件。

2.8.6 配置 SSL 库支持

原文:dev.mysql.com/doc/refman/8.0/en/source-ssl-library-configuration.html

支持加密连接需要 SSL 库,用于随机数生成的熵,以及其他与加密相关的操作。

如果你从源代码分发中编译 MySQL,CMake 默认配置分发以使用已安装的 OpenSSL 库。

要使用 OpenSSL 进行编译,请按照以下步骤:

确保你的系统上安装了 OpenSSL 1.0.1 或更新版本。如果安装的 OpenSSL 版本旧于 1.0.1,CMake 在 MySQL 配置时会产生错误。如果需要获取 OpenSSL,请访问 www.openssl.org。
WITH_SSL CMake 选项确定用于编译 MySQL 的 SSL 库(参见 Section 2.8.7, “MySQL Source-Configuration Options”)。默认值是 -DWITH_SSL=system,使用 OpenSSL。要明确指定此选项,请指定该选项。例如:
cmake . -DWITH_SSL=system
该命令配置分发以使用已安装的 OpenSSL 库。或者,要明确指定 OpenSSL 安装路径,请使用以下语法。如果你安装了多个版本的 OpenSSL,可以防止 CMake 选择错误的版本:
cmake . -DWITH_SSL=*path_name*
从 MySQL 8.0.30 开始,支持替代 OpenSSL 系统包,可以在 EL7 上使用 WITH_SSL=openssl11 或在 EL8 上使用 WITH_SSL=openssl3。由于这些替代版本的 OpenSSL 不支持 LDAP 和 Kerberos 等认证插件,因此这些插件被禁用。
编译并安装分发。

要检查 mysqld 服务器是否支持加密连接,请检查 have_ssl 系统变量的值:

mysql> SHOW VARIABLES LIKE \’have_ssl\’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| have_ssl | YES |
+—————+——-+

如果值为 YES,则服务器支持加密连接。如果值为 DISABLED,则服务器能够支持加密连接,但未使用适当的 –ssl-*xxx* 选项启动以启用加密连接;请参阅 Section 8.3.1, “Configuring MySQL to Use Encrypted Connections”。

2.8.7 MySQL 源配置选项

原文:dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html

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

$> cmake . -LH
$> ccmake .

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

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

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

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

CMake 选项参考
常规选项
安装布局选项
存储引擎选项
功能选项
编译器标志
编译 NDB 集群的 CMake 选项

CMake 选项参考

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

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

格式描述默认引入移除ADD_GDB_INDEX是否启用二进制文件中.gdb_index 部分的生成8.0.18BUILD_CONFIG使用与官方发布相同的构建选项BUNDLE_RUNTIME_LIBRARIES将运行时库与 Windows 服务器 MSI 和 Zip 软件包捆绑在一起OFFCMAKE_BUILD_TYPE生成的构建类型RelWithDebInfoCMAKE_CXX_FLAGSC++编译器标志CMAKE_C_FLAGSC 编译器标志CMAKE_INSTALL_PREFIX安装基本目录/usr/local/mysqlCOMPILATION_COMMENT编译环境注释COMPILATION_COMMENT_SERVER用于 mysqld 使用的编译环境注释8.0.14COMPRESS_DEBUG_SECTIONS压缩二进制可执行文件的调试部分OFF8.0.22CPACK_MONOLITHIC_INSTALL包构建是否生成单个文件OFFDEFAULT_CHARSET默认服务器字符集utf8mb4DEFAULT_COLLATION默认服务器排序规则utf8mb4_0900_ai_ciDISABLE_PSI_COND排除性能模式条件仪表化OFFDISABLE_PSI_DATA_LOCK排除性能模式数据锁定仪表化OFFDISABLE_PSI_ERROR排除性能模式服务器错误仪表化OFFDISABLE_PSI_FILE排除性能模式文件仪表化OFFDISABLE_PSI_IDLE排除性能模式空闲仪表化OFFDISABLE_PSI_MEMORY排除性能模式内存仪器OFFDISABLE_PSI_METADATA排除性能模式 metadata 仪器OFFDISABLE_PSI_MUTEX排除性能模式互斥仪器OFFDISABLE_PSI_PS排除性能模式预处理语句OFFDISABLE_PSI_RWLOCK排除性能模式 rwlock 仪器OFFDISABLE_PSI_SOCKET排除性能模式套接字仪器OFFDISABLE_PSI_SP排除性能模式存储过程仪器OFFDISABLE_PSI_STAGE排除性能模式 stage 仪器OFFDISABLE_PSI_STATEMENT排除性能模式语句仪器OFFDISABLE_PSI_STATEMENT_DIGEST排除性能模式 statements_digest 仪器OFFDISABLE_PSI_TABLE排除性能模式表仪器OFFDISABLE_PSI_THREAD排除性能模式线程仪器OFFDISABLE_PSI_TRANSACTION排除性能模式事务仪器OFFDISABLE_SHARED不构建共享库,编译位置相关代码OFF8.0.18DOWNLOAD_BOOST是否下载 Boost 库OFFDOWNLOAD_BOOST_TIMEOUT下载 Boost 库的超时时间(秒)600ENABLED_LOCAL_INFILE是否启用 LOAD DATA 的 LOCAL 功能OFFENABLED_PROFILING是否启用查询分析代码ONENABLE_DOWNLOADS是否下载可选文件OFF8.0.26ENABLE_EXPERIMENTAL_SYSVARS是否启用实验性 InnoDB 系统变量OFFENABLE_GCOV是否包含 gcov 支持ENABLE_GPROF启用 gprof(仅优化的 Linux 构建)OFFFORCE_COLORED_OUTPUT是否给编译输出着色OFF8.0.33FORCE_INSOURCE_BUILD是否强制在源代码构建OFF8.0.14FORCE_UNSUPPORTED_COMPILER是否允许不支持的编译器OFFFPROFILE_GENERATE是否生成配置引导优化数据OFF8.0.19FPROFILE_USE是否使用配置引导优化数据OFF8.0.19HAVE_PSI_MEMORY_INTERFACE启用性能模式内存跟踪模块,用于动态存储超对齐类型的内存分配函数OFF8.0.26IGNORE_AIO_CHECK使用 -DBUILD_CONFIG=mysql_release 时,忽略 libaio 检查OFFINSTALL_BINDIR用户可执行文件目录PREFIX/binINSTALL_DOCDIR文档目录PREFIX/docsINSTALL_DOCREADMEDIRREADME 文件目录PREFIXINSTALL_INCLUDEDIR头文件目录PREFIX/includeINSTALL_INFODIR信息文件目录PREFIX/docsINSTALL_LAYOUT选择预定义的安装布局STANDALONEINSTALL_LIBDIR库文件目录PREFIX/libINSTALL_MANDIR手册页目录PREFIX/manINSTALL_MYSQLKEYRINGDIRkeyring_file 插件数据文件目录特定于平台INSTALL_MYSQLSHAREDIR共享数据目录PREFIX/shareINSTALL_MYSQLTESTDIRmysql-test 目录PREFIX/mysql-testINSTALL_PKGCONFIGDIRmysqlclient.pc pkg-config 文件目录INSTALL_LIBDIR/pkgconfigINSTALL_PLUGINDIR插件目录PREFIX/lib/pluginINSTALL_PRIV_LIBDIR安装私有库目录8.0.18INSTALL_SBINDIR服务器可执行文件目录PREFIX/binINSTALL_SECURE_FILE_PRIVDIRsecure_file_priv 默认值特定于平台INSTALL_SHAREDIRaclocal/mysql.m4 安装目录PREFIX/shareINSTALL_STATIC_LIBRARIES是否安装静态库ONINSTALL_SUPPORTFILESDIR额外支持文件目录PREFIX/support-filesLINK_RANDOMIZE是否随机化 mysqld 二进制文件中符号的顺序OFFLINK_RANDOMIZE_SEEDLINK_RANDOMIZE 选项的种子值mysqlMAX_INDEXES每个表的最大索引数64MEMCACHED_HOMEmemcached 路径;已过时[none]8.0.23MSVC_CPPCHECK启用 MSVC 代码分析。OFF8.0.33MUTEX_TYPEInnoDB 互斥类型eventMYSQLX_TCP_PORTX 插件使用的 TCP/IP 端口号33060MYSQLX_UNIX_ADDRX 插件使用的 Unix 套接字文件/tmp/mysqlx.sockMYSQL_DATADIR数据目录MYSQL_MAINTAINER_MODE是否启用 MySQL 维护者特定的开发环境OFFMYSQL_PROJECT_NAMEWindows/macOS 项目名称MySQLMYSQL_TCP_PORTTCP/IP 端口号3306MYSQL_UNIX_ADDRUnix 套接字文件/tmp/mysql.sockNDB_UTILS_LINK_DYNAMIC使 NDB 工具动态链接到 ndbclient8.0.22ODBC_INCLUDESODBC 包含目录ODBC_LIB_DIRODBC 库目录OPTIMIZER_TRACE是否支持优化器跟踪OPTIMIZE_SANITIZER_BUILDS是否优化 sanitizer 构建ON8.0.34REPRODUCIBLE_BUILD特别注意创建与构建位置和时间无关的构建结果SHOW_SUPPRESSED_COMPILER_WARNING是否显示被抑制的编译器警告并且不使用-Werror 失败。OFF8.0.30SYSCONFDIR选项文件目录SYSTEMD_PID_DIRsystemd 下 PID 文件目录/var/run/mysqldSYSTEMD_SERVICE_NAMEsystemd 下 MySQL 服务的名称mysqldTMPDIRtmpdir 默认值USE_LD_GOLD是否使用 GNU gold 链接器ON8.0.31USE_LD_LLD是否使用 LLVM lld 链接器ON8.0.16WIN_DEBUG_NO_INLINE是否禁用函数内联OFFWITHOUT_SERVER不构建服务器OFFWITHOUT_xxx_STORAGE_ENGINE从构建中排除存储引擎 xxxWITH_ANT用于构建 GCS Java 包装器的 Ant 路径WITH_ASAN启用 AddressSanitizerOFFWITH_ASAN_SCOPE启用 AddressSanitizer 的 -fsanitize-address-use-after-scope Clang 标志OFFWITH_AUTHENTICATION_CLIENT_PLUGINS如果构建了相应的服务器认证插件,则自动启用8.0.26WITH_AUTHENTICATION_LDAP是否在无法构建 LDAP 认证插件时报告错误OFFWITH_AUTHENTICATION_PAM构建 PAM 认证插件OFFWITH_AWS_SDKAmazon Web Services 软件开发工具包的位置WITH_BOOSTBoost 库源代码的位置WITH_BUILD_ID在 Linux 系统上生成唯一的构建 IDON8.0.31WITH_BUNDLED_LIBEVENT在构建 ndbmemcache 时使用捆绑的 libevent;已过时ON8.0.23WITH_BUNDLED_MEMCACHED在构建 ndbmemcache 时使用捆绑的 memcached;已过时ON8.0.23WITH_CLASSPATH构建 MySQL Cluster Connector for Java 时要使用的类路径。默认为空字符串。WITH_CLIENT_PROTOCOL_TRACING构建客户端协议跟踪框架ONWITH_CURLcurl 库的位置WITH_DEBUG是否包含调试支持OFFWITH_DEFAULT_COMPILER_OPTIONS是否使用默认编译器选项ONWITH_DEFAULT_FEATURE_SET是否使用默认功能集ON8.0.22WITH_DEVELOPER_ENTITLEMENTS是否在 macOS 上为所有可执行文件添加 ‘get-task-allow’ 权限,以便在服务器意外停止时生成核心转储OFF8.0.30WITH_EDITLINE使用哪个 libedit/editline 库bundledWITH_ERROR_INSERT启用 NDB 存储引擎中的错误注入。不应用于构建用于生产的二进制文件。OFFWITH_FIDOFIDO 库支持类型bundled8.0.27WITH_GMOCKgooglemock 分发路径8.0.26WITH_ICUICU 支持类型bundledWITH_INNODB_EXTRA_DEBUG是否包含 InnoDB 的额外调试支持。OFFWITH_INNODB_MEMCACHED是否生成 memcached 共享库。OFFWITH_JEMALLOC是否链接 -ljemallocOFF8.0.16WITH_KEYRING_TEST构建密钥环测试程序OFFWITH_LIBEVENT使用哪个 libevent 库bundledWITH_LIBWRAP是否包含 libwrap(TCP wrappers)支持OFFWITH_LOCK_ORDER是否启用 LOCK_ORDER 工具OFF8.0.17WITH_LSAN是否运行 LeakSanitizer,不包括 AddressSanitizerOFF8.0.16WITH_LTO启用链接时优化器OFF8.0.13WITH_LZ4LZ4 库支持类型bundledWITH_LZMALZMA 库支持类型bundled8.0.16WITH_MECAB编译 MeCabWITH_MSAN启用 MemorySanitizerOFFWITH_MSCRT_DEBUG启用 Visual Studio CRT 内存泄漏跟踪OFFWITH_MYSQLX是否禁用 X 协议ONWITH_NDB构建 MySQL NDB 集群OFF8.0.31WITH_NDBAPI_EXAMPLES构建 API 示例程序OFFWITH_NDBCLUSTER构建 NDB 存储引擎OFFWITH_NDBCLUSTER_STORAGE_ENGINE供内部使用;在所有情况下可能不起作用;用户应该使用 WITH_NDBCLUSTER 代替ONWITH_NDBMTD构建多线程数据节点ONWITH_NDB_DEBUG生成用于测试或故障排除的调试构建OFFWITH_NDB_JAVA启用构建 Java 和 ClusterJ 支持。默认启用。仅在 MySQL Cluster 中受支持。ONWITH_NDB_PORT使用此选项构建的管理服务器使用的默认端口。如果未使用此选项构建它,则管理服务器的默认端口为 1186。[none]WITH_NDB_TEST包括 NDB API 测试程序OFFWITH_NUMA设置 NUMA 内存分配策略WITH_PACKAGE_FLAGS用于 RPM/DEB 包通常使用的标志,是否将它们添加到这些平台上的独立构建中8.0.26WITH_PLUGIN_NDBCLUSTER供内部使用;在所有情况下可能不起作用。用户应该使用 WITH_NDBCLUSTER 或 WITH_NDB 代替8.0.138.0.31WITH_PROTOBUF使用哪个 Protocol Buffers 包bundledWITH_RAPID是否构建快速开发周期插件ONWITH_RAPIDJSONRapidJSON 支持类型bundled8.0.13WITH_RE2RE2 库支持类型bundled8.0.18WITH_ROUTER是否构建 MySQL RouterON8.0.16WITH_SSLSSL 支持类型systemWITH_SYSTEMD启用 systemd 支持文件的安装OFFWITH_SYSTEMD_DEBUG启用额外的 systemd 调试信息OFF8.0.22WITH_SYSTEM_LIBS设置未显式设置的库选项的系统值OFFWITH_TCMALLOC是否链接 -ltcmallocOFF8.0.22WITH_TEST_TRACE_PLUGIN构建测试协议跟踪插件OFFWITH_TSAN启用线程检测器OFFWITH_UBSAN启用未定义行为检测器OFFWITH_UNIT_TESTS使用单元测试编译 MySQLONWITH_UNIXODBC启用 unixODBC 支持OFFWITH_VALGRIND是否编译 Valgrind 头文件OFFWITH_WIN_JEMALLOC包含 jemalloc.dll 的目录路径8.0.29WITH_ZLIBzlib 支持类型bundledWITH_ZSTDzstd 支持类型bundled8.0.18WITH_xxx_STORAGE_ENGINE将存储引擎 xxx 静态编译到服务器中格式描述默认值引入版本移除版本

通用选项

-DBUILD_CONFIG=mysql_release
此选项配置源分发,使用 Oracle 用于生成官方 MySQL 发行版的二进制分发的相同构建选项。
-DWITH_BUILD_ID=*bool*
在 Linux 系统上,生成一个唯一的构建 ID,该 ID 用作build_id系统变量的值,并在 MySQL 服务器启动时写入 MySQL 服务器日志。将此选项设置为OFF以禁用此功能。
在 MySQL 8.0.31 中添加,此选项对 Linux 以外的平台没有影响。
-DBUNDLE_RUNTIME_LIBRARIES=*bool*
是否将运行时库与 Windows 服务器 MSI 和 Zip 包捆绑在一起。
-DCMAKE_BUILD_TYPE=*type*
要生成的构建类型:

RelWithDebInfo:启用优化并生成调试信息。这是默认的 MySQL 构建类型。
Release:启用优化但省略调试信息以减小构建大小。此构建类型在 MySQL 8.0.13 中添加。
Debug:禁用优化并生成调试信息。如果启用了WITH_DEBUG选项,则也使用此构建类型。也就是说,-DWITH_DEBUG=1与-DCMAKE_BUILD_TYPE=Debug具有相同效果。
选项值None和MinSizeRel不受支持。
-DCPACK_MONOLITHIC_INSTALL=*bool*
此选项影响make package操作是生成多个安装包文件还是单个文件。如果禁用,则操作会生成多个安装包文件,这可能对于只想安装完整 MySQL 安装的子集很有用。如果启用,则会生成一个文件用于安装所有内容。
-DFORCE_INSOURCE_BUILD=*bool*
定义是否强制在源代码构建。推荐使用源外构建,因为它们允许从同一源代码进行多次构建,并且可以通过删除构建目录快速进行清理。要强制在源代码构建,请使用-DFORCE_INSOURCE_BUILD=ON调用CMake。
-DFORCE_COLORED_OUTPUT=*bool*
定义是否在命令行编译时为gcc和clang启用带颜色的编译器输出。默认为OFF。

安装布局选项

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

-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*
Info 文件安装位置。
-DINSTALL_LAYOUT=*name*
选择预定义的安装布局:

STANDALONE:与.tar.gz和.zip包使用的布局相同。这是默认设置。
RPM:类似于 RPM 软件包的布局。
SVR4:Solaris 软件包布局。
DEB:DEB 软件包布局(实验性)。
您可以选择预定义的布局,但通过指定其他选项修改各个组件的安装位置。例如:
cmake . -DINSTALL_LAYOUT=SVR4 -DMYSQL_DATADIR=/var/mysql/data
INSTALL_LAYOUT的值确定secure_file_priv、keyring_encrypted_file_data和keyring_file_data系统变量的默认值。请参阅第 7.1.8 节“服务器系统变量”和第 8.4.4.19 节“密钥环系统变量”中这些变量的描述。
-DINSTALL_LIBDIR=*dir_name*
库文件安装位置。
-DINSTALL_MANDIR=*dir_name*
手册页安装位置。
-DINSTALL_MYSQLKEYRINGDIR=*dir_path*
用作keyring_file插件数据文件位置的默认目录。默认值是平台特定的,取决于INSTALL_LAYOUT CMake选项的值;请参阅第 7.1.8 节“服务器系统变量”中keyring_file_data系统变量的描述。
-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 结尾,在这种情况下会首先移除该部分。
-DINSTALL_PLUGINDIR=*dir_name*
插件目录的位置。
可以在服务器启动时使用 –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。这对大多数情况都有效,但在使用 Resource Group 功能时,mysqld 是 setsuid,加载器会忽略包含 $ORIGIN 的任何 RPATH。为了克服这个问题,在 DEB 和 RPM 版本的 mysqld 中设置了目录的明确完整路径,因为目标位置是已知的。对于 tarball 安装,需要使用类似 patchelf 的工具对 mysqld 进行修补。
这个选项是在 MySQL 8.0.18 版本中添加的。
-DINSTALL_SBINDIR=*dir_name*
安装 mysqld 服务器的位置。
-DINSTALL_SECURE_FILE_PRIVDIR=*dir_name*
secure_file_priv 系统变量的默认值。默认值是平台特定的,取决于 INSTALL_LAYOUT CMake 选项的值;请参阅 Section 7.1.8, “Server System Variables” 中的 secure_file_priv 系统变量的描述。
-DINSTALL_SHAREDIR=*dir_name*
安装 aclocal/mysql.m4 的位置。
-DINSTALL_STATIC_LIBRARIES=*bool*
是否安装静态库。默认值是ON。如果设置为OFF,这些库文件不会被安装:libmysqlclient.a,libmysqlservices.a。
-DINSTALL_SUPPORTFILESDIR=*dir_name*
安装额外支持文件的位置。
-DLINK_RANDOMIZE=*bool*
是否随机化mysqld二进制文件中符号的顺序。默认值是OFF。此选项仅应用于调试目的。
-DLINK_RANDOMIZE_SEED=*val*
LINK_RANDOMIZE选项的种子值。该值是一个字符串。默认值是mysql,一个任意的选择。
-DMYSQL_DATADIR=*dir_name*
MySQL 数据目录的位置。
可以在服务器启动时使用–datadir选项设置此值。
-DODBC_INCLUDES=*dir_name*
ODBC 包含目录的位置,在配置 Connector/ODBC 时可能会用到。
-DODBC_LIB_DIR=*dir_name*
ODBC 库目录的位置,在配置 Connector/ODBC 时可能会用到。
-DSYSCONFDIR=*dir_name*
默认的my.cnf选项文件目录。
无法在服务器启动时设置此位置,但可以使用–defaults-file=*file_name*选项启动具有给定选项文件的服务器,其中*file_name*是文件的完整路径名。
-DSYSTEMD_PID_DIR=*dir_name*
当 MySQL 由 systemd 管理时创建 PID 文件的目录名称。默认值是/var/run/mysqld;根据INSTALL_LAYOUT的值可能会隐式更改。
除非启用了WITH_SYSTEMD,否则此选项将被忽略。
-DSYSTEMD_SERVICE_NAME=*name*
当 MySQL 由systemd管理时要使用的 MySQL 服务名称。默认值是mysqld;根据INSTALL_LAYOUT的值可能会隐式更改。
除非启用了WITH_SYSTEMD,否则此选项将被忽略。
-DTMPDIR=*dir_name*
用于tmpdir系统变量的默认位置。如果未指定,则默认值为<stdio.h>中的P_tmpdir。

存储引擎选项

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

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

要将存储引擎静态编译到服务器中,请使用-DWITH_*engine*_STORAGE_ENGINE=1。一些允许的*engine*值包括ARCHIVE、BLACKHOLE、EXAMPLE和FEDERATED。示例:

-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1

要构建支持 NDB 集群的 MySQL,请使用WITH_NDB选项。(NDB 8.0.30 及更早版本:使用WITH_NDBCLUSTER。)

注意

无法在没有性能模式支持的情况下进行编译。如果希望在没有特定类型的仪器的情况下进行编译,可以使用以下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

例如,要在没有互斥仪器的情况下进行编译,请使用-DDISABLE_PSI_MUTEX=1配置 MySQL。

要排除构建中的存储引擎,请使用-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之外的链接器,则禁用它不起作用。
此选项在 MySQL 8.0.18 中添加。
-DCOMPILATION_COMMENT=*string*
有关编译环境的描述性注释。从 MySQL 8.0.14 开始,mysqld使用COMPILATION_COMMENT_SERVER。其他程序继续使用COMPILATION_COMMENT。
-DCOMPRESS_DEBUG_SECTIONS=*bool*
是否压缩二进制可执行文件的调试部分(仅限 Linux)。压缩可执行文件的调试部分可以节省空间,但在构建过程中会增加额外的 CPU 时间。
默认为OFF。如果未显式设置此选项,但设置了COMPRESS_DEBUG_SECTIONS环境变量,则该选项将从该变量中获取其值。
此选项在 MySQL 8.0.22 中添加。
-DCOMPILATION_COMMENT_SERVER=*string*
用于mysqld的编译环境的描述性注释(例如,设置version_comment系统变量)。此选项在 MySQL 8.0.14 中添加。在 8.0.14 之前,服务器使用COMPILATION_COMMENT。
-DDEFAULT_CHARSET=*charset_name*
服务器字符集。默认情况下,MySQL 使用utf8mb4字符集。
*charset_name*可以是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选项设置此值。
-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*
是否排除性能模式读写锁仪器。默认为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*
是否排除性能模式语句摘要仪器。默认为OFF(包括)。
-DDISABLE_PSI_TABLE=*bool*
是否排除性能模式表仪器。默认为OFF(包括)。
-DDISABLE_SHARED=*bool*
是否禁用构建共享库和编译位置相关代码。默认为OFF(编译位置无关代码)。
此选项未使用,并在 MySQL 8.0.18 中已删除。
-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(包括)。
-DDOWNLOAD_BOOST=*bool*
是否下载 Boost 库。默认为OFF。
有关使用 Boost 的更多讨论,请参见WITH_BOOST选项。
-DDOWNLOAD_BOOST_TIMEOUT=*seconds*
下载 Boost 库的超时时间(秒)。默认为 600 秒。
有关使用 Boost 的更多讨论,请参见WITH_BOOST选项。
-DENABLE_DOWNLOADS=*bool*
是否下载可选文件。例如,启用此选项后,CMake会下载用于运行单元测试的 Google Test 分发,或者构建 GCS Java 包装器所需的 Ant 和 JUnit。
截至 MySQL 8.0.26,MySQL 源代码分发捆绑了用于运行单元测试的 Google Test 源代码。因此,从该版本开始,WITH_GMOCK和ENABLE_DOWNLOADS CMake选项已被移除,并且如果指定了这些选项,则会被忽略。
-DENABLE_EXPERIMENTAL_SYSVARS=*bool*
是否启用实验性InnoDB系统变量。实验性系统变量适用于从事 MySQL 开发的人员,应仅在开发或测试环境中使用,并可能在未来的 MySQL 版本中被删除而不另行通知。有关实验性系统变量的信息,请参考 MySQL 源代码树中的/storage/innobase/handler/ha_innodb.cc。实验性系统变量可以通过搜索“PLUGIN_VAR_EXPERIMENTAL”来识别。
-DWITHOUT_SERVER=*bool*
是否在没有 MySQL 服务器的情况下构建。默认为 OFF,即构建服务器。
这被视为一个实验选项;最好与服务器一起构建。
-DENABLE_GCOV=*bool*
是否包含gcov支持(仅限 Linux)。
-DENABLE_GPROF=*bool*
是否启用gprof(仅优化的 Linux 构建)。
-DENABLED_LOCAL_INFILE=*bool*
此选项控制 MySQL 客户端库的默认LOCAL功能。因此,未做明确安排的客户端将根据 MySQL 构建时指定的ENABLED_LOCAL_INFILE设置来禁用或启用LOCAL功能。
在 MySQL 二进制发行版中,默认情况下,客户端库是使用禁用的ENABLED_LOCAL_INFILE编译的。如果你从源代码编译 MySQL,请根据客户端是否需要禁用或启用LOCAL功能,相应地使用禁用或启用ENABLED_LOCAL_INFILE进行配置。
ENABLED_LOCAL_INFILE控制客户端端的LOCAL功能的默认设置。对于服务器端,local_infile系统变量控制服务器端的LOCAL功能。要明确导致服务器拒绝或允许LOAD DATA LOCAL语句(无论客户端程序和库在构建时或运行时如何配置),请分别使用启用或禁用–local-infile启动mysqld。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。
这个选项是在 MySQL 8.0.30 版本中添加的。
-DFPROFILE_GENERATE=*bool*
是否生成基于配置文件的优化(PGO)数据。此选项可用于在 GCC 中尝试 PGO。有关使用 FPROFILE_GENERATE 和 FPROFILE_USE 的信息,请参阅 MySQL 源代码分发中的 cmake/fprofile.cmake。这些选项已在 GCC 8 和 9 中进行了测试。
这个选项是在 MySQL 8.0.19 版本中添加的。
-DFPROFILE_USE=*bool*
是否使用基于配置文件的优化(PGO)数据。此选项可用于在 GCC 中尝试 PGO。有关使用 FPROFILE_GENERATE 和 FPROFILE_USE 的信息,请参阅 MySQL 源代码分发中的 cmake/fprofile.cmake 文件。这些选项已在 GCC 8 和 9 中进行了测试。
启用 FPROFILE_USE 也会启用 WITH_LTO。
这个选项是在 MySQL 8.0.19 版本中添加的。
-DHAVE_PSI_MEMORY_INTERFACE=*bool*
是否启用性能模式内存跟踪模块,用于动态存储超对齐类型的内存分配函数(ut::aligned_*name* 库函数)。
-DIGNORE_AIO_CHECK=*bool*
如果在 Linux 上给出了 -DBUILD_CONFIG=mysql_release 选项,则默认情况下必须链接 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 正常工作。
此选项是在 MySQL 8.0.30 中添加的。
-DMUTEX_TYPE=*type*
InnoDB 使用的互斥类型。选项包括:

event:使用事件互斥量。这是默认值和原始的 InnoDB 互斥量实现。
sys:在 UNIX 系统上使用 POSIX 互斥量。如果可用,Windows 上使用 CRITICAL_SECTION 对象。
futex:使用 Linux futexes 而不是条件变量来调度等待线程。
-DMYSQLX_TCP_PORT=*port_num*
X Plugin 监听 TCP/IP 连接的端口号。默认值为 33060。
可以使用 mysqlx_port 系统变量在服务器启动时设置此值。
-DMYSQLX_UNIX_ADDR=*file_name*
服务器监听 X Plugin 套接字连接的 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 8.0.11 中添加的。从 MySQL 8.0.12 开始,默认为 RelWithDebInfo 构建的 ON。
-DUSE_LD_GOLD=*bool*
MySQL 8.0.31 中删除了 GNU gold链接器支持;此 CMake 选项也已删除。
CMake在可用且未明确禁用时会导致构建过程链接到 GNU gold链接器。要禁用此链接器的使用,请指定-DUSE_LD_GOLD=OFF选项。
-DUSE_LD_LLD=*bool*
CMake在可用且未明确禁用时会导致使用 LLVM lld链接器为 Clang 进行链接。要禁用此链接器的使用,请指定-DUSE_LD_LLD=OFF选项。
此选项是在 MySQL 8.0.16 中添加的。
-DWIN_DEBUG_NO_INLINE=*bool*
是否在 Windows 上禁用函数内联。默认值为OFF(启用内联)。
-DWITH_ANT=*path_name*
设置 Ant 的路径,在构建 GCS Java 包装器时需要。将WITH_ANT设置为保存 Ant 压缩包或解压缩存档的目录路径。当未设置WITH_ANT,或设置为特殊值system时,构建过程假定二进制ant存在于$PATH中。
-DWITH_ASAN=*bool*
是否启用 AddressSanitizer,适用于支持它的编译器。默认值为OFF。
-DWITH_ASAN_SCOPE=*bool*
是否启用 AddressSanitizer -fsanitize-address-use-after-scope Clang 标志以进行使用后范围检测。默认值为关闭。要使用此选项,必须同时启用-DWITH_ASAN。
-DWITH_AUTHENTICATION_CLIENT_PLUGINS=*bool*
如果构建了任何相应的服务器身份验证插件,则此选项将自动启用。因此,其值取决于其他CMake选项,不应明确设置。
此选项是在 MySQL 8.0.26 中添加的。
-DWITH_AUTHENTICATION_LDAP=*bool*
是否在无法构建 LDAP 身份验证插件时报告错误:

如果禁用此选项(默认情况下),则仅当找到所需的头文件和库时才构建 LDAP 插件。如果未找到,CMake会显示相关提示。
如果启用此选项,则找不到所需的头文件和库将导致 CMake 生成错误,阻止服务器的构建。
有关 LDAP 认证的信息,请参见第 8.4.1.7 节,“LDAP 可插拔认证”。
-DWITH_AUTHENTICATION_PAM=*bool*
是否构建 PAM 认证插件,对于包含此插件的源树。 (请参见第 8.4.1.5 节,“PAM 可插拔认证”。)如果指定了此选项且无法编译插件,则构建将失败。
-DWITH_AWS_SDK=*path_name*
亚马逊 Web 服务软件开发工具包的位置。
-DWITH_BOOST=*path_name*
构建 MySQL 需要 Boost 库。这些CMake选项可以控制库源位置,并决定是否自动下载:

-DWITH_BOOST=*path_name* 指定 Boost 库目录位置。还可以通过设置 BOOST_ROOT 或 WITH_BOOST 环境变量来指定 Boost 位置。
-DWITH_BOOST=system 也是允许的,表示在标准位置上编译主机上安装了正确版本的 Boost。在这种情况下,将使用已安装的 Boost 版本,而不是任何与 MySQL 源分发包含的版本。
-DDOWNLOAD_BOOST=*bool* 指定是否在指定位置不存在 Boost 源时下载 Boost 源。默认值为 OFF。
-DDOWNLOAD_BOOST_TIMEOUT=*seconds* 下载 Boost 库的超时时间(秒)。默认值为 600 秒。
例如,如果通常将 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*
是否将客户端协议跟踪框架构建到客户端库中。默认情况下,此选项已启用。
有关编写协议跟踪客户端插件的信息,请参阅 编写协议跟踪插件。
另请参阅 WITH_TEST_TRACE_PLUGIN 选项。
-DWITH_CURL=*curl_type*
curl 库的位置。curl_type 可以是 system(使用系统 curl 库)或 curl 库的路径名。
-DWITH_DEBUG=*bool*
是否包含调试支持。
配置 MySQL 以启用调试支持,使您可以在启动服务器时使用 –debug=\”d,parser_debug\” 选项。这会导致用于处理 SQL 语句的 Bison 解析器将解析跟踪转储到服务器的标准错误输出。通常,此输出会写入错误日志。
InnoDB 存储引擎的同步调试检查在 UNIV_DEBUG 下定义,并且在使用 WITH_DEBUG 选项编译时可用。当编译时启用调试支持时,innodb_sync_debug 配置选项可用于启用或禁用 InnoDB 同步调试检查。
启用 WITH_DEBUG 也会启用调试同步。此功能用于测试和调试。编译时,调试同步在运行时默认情况下是禁用的。要启用它,请使用 –debug-sync-timeout=*N* 选项启动 mysqld,其中 N 是大于 0 的超时值。(默认值为 0,表示禁用调试同步。)N 成为单个同步点的默认超时时间。
当使用 WITH_DEBUG 选项编译时,InnoDB 存储引擎的同步调试检查可用。
有关调试同步功能及如何使用同步点的描述,请参阅 MySQL 内部:测试同步。
-DWITH_DEFAULT_FEATURE_SET=*bool*
是否使用cmake/build_configurations/feature_set.cmake中的标志。此选项在 MySQL 8.0.22 中已移除。
-DWITH_EDITLINE=*value*
要使用的libedit/editline库。允许的值为bundled(默认)和system。
-DWITH_FIDO=*fido_type*
authentication_fido身份验证插件是使用 FIDO 库实现的(请参阅第 8.4.1.11 节,“FIDO 可插拔认证”)。WITH_FIDO选项指示 FIDO 支持的来源:

bundled: 使用与分发包捆绑的 FIDO 库。这是默认设置。
从 MySQL 8.0.30 开始,MySQL 包含fido2版本 1.8.0.(之前的版本使用了fido2 1.5.0)。
system: 使用系统 FIDO 库。
如果所有身份验证插件都已禁用,则WITH_FIDO将被禁用(设置为none)。
此选项在 MySQL 8.0.27 中添加。
-DWITH_GMOCK=*path_name*
用于 Google Test 基于单元测试的 googlemock 分发路径。选项值是分发 zip 文件的路径。或者,将WITH_GMOCK环境变量设置为路径名。还可以使用-DENABLE_DOWNLOADS=1,这样 CMake 会从 GitHub 下载分发包。
如果您在构建 MySQL 时没有包含 Google Test 单元测试(通过配置不包含WITH_GMOCK),CMake 会显示一条消息,指示如何下载它。
从 MySQL 8.0.26 开始,MySQL 源代码分发包含 Google Test 源代码。因此,从那个版本开始,WITH_GMOCK和ENABLE_DOWNLOADS CMake 选项被移除,并且如果指定了这些选项,则会被忽略。
-DWITH_ICU={*icu_type*|*path_name*}
MySQL 使用国际 Unicode 组件(ICU)来支持正则表达式操作。WITH_ICU选项指示要包含的 ICU 支持类型或要使用的 ICU 安装路径。

*icu_type*可以是以下值之一:

bundled: 使用与分发包捆绑的 ICU 库。这是默认设置,也是 Windows 唯一支持的选项。
system: 使用系统 ICU 库。
path_name 是要使用的 ICU 安装路径名。这可能比使用 system 的 icu_type 值更可取,因为它可以防止 CMake 检测和使用系统上安装的旧版或不正确的 ICU 版本。(执行相同操作的另一种允许方式是将 WITH_ICU 设置为 system 并将 CMAKE_PREFIX_PATH 选项设置为 path_name。)
-DWITH_INNODB_EXTRA_DEBUG=*bool*
是否包含额外的 InnoDB 调试支持。
启用 WITH_INNODB_EXTRA_DEBUG 将打开额外的 InnoDB 调试检查。只有在启用 WITH_DEBUG 时才能启用此选项。
-DWITH_INNODB_MEMCACHED=*bool*
是否生成 memcached 共享库(libmemcached.so 和 innodb_engine.so)。
-DWITH_JEMALLOC=*bool*
是否链接 -ljemalloc。如果启用,内置的 malloc()、calloc()、realloc() 和 free() 函数将被禁用。默认值为 OFF。
WITH_JEMALLOC 和 WITH_TCMALLOC 是互斥的。
这个选项是在 MySQL 8.0.16 版本中添加的。
-DWITH_WIN_JEMALLOC=*string*
在 Windows 上,传入一个包含 jemalloc.dll 的目录路径以启用 jemalloc 功能。构建系统将 jemalloc.dll 复制到与 mysqld.exe 和/或 mysqld-debug.exe 相同的目录中,并将其用于内存管理操作。如果找不到 jemalloc.dll 或者没有导出所需函数,则使用标准内存函数。一个 INFORMATION 级别的日志消息记录了是否找到并使用了 jemalloc。
这个选项对于官方 MySQL Windows 二进制文件是启用的。
这个选项是在 MySQL 8.0.29 版本中添加的。
-DWITH_KEYRING_TEST=*bool*
是否构建伴随 keyring_file 插件的测试程序。默认值为 OFF。测试文件源代码位于 plugin/keyring/keyring-test 目录中。
-DWITH_LIBEVENT=*string*
要使用哪个 libevent 库。允许的值为 bundled(默认)和 system。在 MySQL 8.0.21 之前,如果指定 system,则如果存在系统 libevent 库,则使用该库,否则会出现错误。在 MySQL 8.0.21 及更高版本中,如果指定 system 并且找不到系统 libevent 库,则无论如何都会出现错误,并且不会使用捆绑的 libevent。
libevent 库是 InnoDB memcached、X Plugin 和 MySQL Router 所必需的。
-DWITH_LIBWRAP=*bool*
是否包括libwrap(TCP 包装程序)支持。
-DWITH_LOCK_ORDER=*bool*
是否启用 LOCK_ORDER 工具。默认情况下,此选项已禁用,服务器构建不包含任何工��。如果启用工具,则 LOCK_ORDER 工具可用,并且可以按照第 7.9.3 节,“LOCK_ORDER 工具”中描述的方式使用。
注意
启用WITH_LOCK_ORDER选项后,MySQL 构建需要flex程序。
此选项在 MySQL 8.0.17 中添加。
-DWITH_LSAN=*bool*
是否运行 LeakSanitizer,不包括 AddressSanitizer。默认值为OFF。
此选项在 MySQL 8.0.16 中添加。
-DWITH_LTO=*bool*
是否启用链接时优化器,如果编译器支持。默认值为OFF,除非启用FPROFILE_USE。
此选项在 MySQL 8.0.13 中添加。
-DWITH_LZ4=*lz4_type*
WITH_LZ4选项指示zlib支持的来源:

bundled: 使用分发的lz4库。这是默认值。
system: 使用系统的lz4库。如果WITH_LZ4设置为此值,则不会构建lz4_decompress实用程序。在这种情况下,可以使用系统的lz4命令。
-DWITH_LZMA=*lzma_type*
要包含的 LZMA 库支持类型。*lzma_type*可以是以下值之一:

bundled: 使用分发的 LZMA 库。这是默认值。
system: 使用系统的 LZMA 库。
此选项在 MySQL 8.0.16 中移除。
-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 代码分析。默认为OFF。
-DWITH_MYSQLX=*bool*
是否构建支持 X 插件。默认为ON。参见第二十二章,将 MySQL 用作文档存储。
-DWITH_NUMA=*bool*
明确设置 NUMA 内存分配策略。CMake根据当前平台是否支持NUMA来设置默认值WITH_NUMA。对于不支持 NUMA 的平台,CMake的行为如下:

没有 NUMA 选项(正常情况下),CMake会继续正常运行,只会产生以下警告:NUMA 库缺失或所需版本不可用。
使用-DWITH_NUMA=ON,CMake会中止并显示以下错误:NUMA 库缺失或所需版本不可用。
-DWITH_PACKAGE_FLAGS=*bool*
对于通常用于 RPM 和 Debian 软件包的标志,是否将它们添加到这些平台上的独立构建中。对于非调试构建,默认值为ON。
此选项在 MySQL 8.0.26 中添加。
-DWITH_PROTOBUF=*protobuf_type*
要使用的 Protocol Buffers 包。*protobuf_type*可以是以下值之一:

bundled:使用与发行版捆绑的包。这是默认值。可选择使用INSTALL_PRIV_LIBDIR来修改动态 Protobuf 库目录。
system:使用系统上安装的包。
其他值将被忽略,并回退到bundled。
-DWITH_RAPID=*bool*
是否构建快速开发周期插件。启用时,在构建树中创建一个rapid目录,其中包含这些插件。禁用时,在构建树中不会创建rapid目录。默认为ON,除非从源树中删除了rapid目录,此时默认值变为OFF。
-DWITH_RAPIDJSON=*rapidjson_type*
要包含的 RapidJSON 库支持类型。*rapidjson_type*可以是以下值之一:

bundled: 使用与发行版捆绑的 RapidJSON 库。这是默认设置。
system: 使用系统 RapidJSON 库。需要版本 1.1.0 或更高版本。
此选项在 MySQL 8.0.13 中添加。
-DWITH_RE2=*re2_type*
要包含的 RE2 库支持类型。*re2_type*可以是以下值之一:

bundled: 使用与发行版捆绑的 RE2 库。这是默认设置。
system: 使用系统 RE2 库。
从 MySQL 8.0.18 开始,MySQL 不再使用 RE2 库,此选项已被移除。
-DWITH_ROUTER=*bool*
是否构建 MySQL Router。默认为ON。
此选项在 MySQL 8.0.16 中添加。
-DWITH_SSL={*ssl_type*|path_name}
为了支持加密连接、用于随机数生成的熵以及其他与加密相关的操作,MySQL 必须使用 SSL 库构建。此选项指定要使用的 SSL 库。

*ssl_type*可以是以下值之一:

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的同义词。
openssl*version*:(MySQL 8.0.30 及更高版本:)使用替代的 OpenSSL 系统包,如 EL7 上的openssl11,或 EL8 上的openssl3。
身份验证插件,如 LDAP 和 Kerberos,已禁用,因为它们不支持这些替代版本的 OpenSSL。
path_name是要使用的 OpenSSL 安装路径名。这可能比使用system的ssl_type值更可取,因为它可以防止 CMake 检测和使用系统上安装的旧版或不正确的 OpenSSL 版本。(执行相同操作的另一种允许的方法是将WITH_SSL设置为system并将CMAKE_PREFIX_PATH选项设置为path_name。)
有关配置 SSL 库的其他信息,请参见第 2.8.6 节“配置 SSL 库支持”。
-DWITH_SYSTEMD=*bool*
是否启用 systemd 支持文件的安装。默认情况下,此选项已禁用。启用时,将安装 systemd 支持文件,并且诸如 mysqld_safe 和 System V 初始化脚本等脚本将不会安装。在 systemd 不可用的平台上,启用 WITH_SYSTEMD 将导致 CMake 报错。
有关使用 systemd 的更多信息,请参见 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。该部分还包括有关指定在 [mysqld_safe] 选项组中另行指定的选项的信息。因为在使用 systemd 时未安装 mysqld_safe,这些选项必须以另一种方式指定。
-DWITH_SYSTEM_LIBS=*bool*
这个选项作为一个“总称”选项,用于设置任何未明确设置的以下 CMake 选项的 system 值:WITH_CURL、WITH_EDITLINE、WITH_FIDO、WITH_ICU、WITH_LIBEVENT、WITH_LZ4、WITH_LZMA、WITH_PROTOBUF、WITH_RE2、WITH_SSL、WITH_ZSTD。
WITH_ZLIB 在 MySQL 8.0.30 之前包含在此处。
-DWITH_SYSTEMD_DEBUG=*bool*
是否生成额外的 systemd 调试信息,用于在 systemd 上运行 MySQL 的平台。默���值为 OFF。
这个选项是在 MySQL 8.0.22 版本中添加的。
-DWITH_TCMALLOC=*bool*
是否链接 -ltcmalloc。如果启用,内置的 malloc()、calloc()、realloc() 和 free() 例程将被禁用。默认值为 OFF。
WITH_TCMALLOC 和 WITH_JEMALLOC 是互斥的。
这个选项是在 MySQL 8.0.22 版本中添加的。
-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*
启用 unixODBC 支持,用于 Connector/ODBC。
-DWITH_VALGRIND=*bool*
是否在 MySQL 代码中暴露 Valgrind API 的 Valgrind 头文件。默认情况下为OFF。
要生成 Valgrind-aware 调试构建,通常将-DWITH_VALGRIND=1与-DWITH_DEBUG=1结合使用。请参阅构建调试配置。
-DWITH_ZLIB=*zlib_type*
一些功能要求服务器构建时具有压缩库支持,例如 COMPRESS() 和 UNCOMPRESS() 函数,以及客户端/服务器协议的压缩。WITH_ZLIB 选项指示 zlib 支持的来源:
在 MYSQL 8.0.32 及更高版本中,zlib 的最低支持版本为 1.2.13。

bundled:使用分发的 zlib 库。这是默认值。
system:使用系统的 zlib 库。如果 WITH_ZLIB 设置为此值,则不会构建 zlib_decompress 实用程序。在这种情况下,可以使用系统的 openssl zlib 命令。
-DWITH_ZSTD=*zstd_type*
使用 zstd 算法进行连接压缩(参见 Section 6.2.8, “Connection Compression Control”) 需要服务器构建时支持 zstd 库。WITH_ZSTD 选项指示 zstd 支持的来源:

bundled:使用分发的 zstd 库。这是默认值。
system:使用系统的 zstd 库。
此选项在 MySQL 8.0.18 中添加。

编译器标志

-DCMAKE_C_FLAGS=\”*flags*\”
C 编译器的标志。
-DCMAKE_CXX_FLAGS=\”*flags*\”
C++ 编译器的标志。
-DWITH_DEFAULT_COMPILER_OPTIONS=*bool*
是否使用 cmake/build_configurations/compiler_options.cmake 中的标志。
注意
所有优化标志都经过 MySQL 构建团队精心选择和测试。覆盖它们可能导致意外结果,并且由您自行承担风险。
-DOPTIMIZE_SANITIZER_BUILDS=*bool*
是否将 -O1 -fno-inline 添加到 sanitizer 构建中。默认值为 ON。

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

在提供自己的编译器标志时,您可能希望同时指定CMAKE_BUILD_TYPE。

例如,在 64 位 Linux 机器上创建 32 位发布构建,可以执行以下操作:

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

如果设置影响优化的标志(-O*number*),则必须设置 CMAKE_C_FLAGS_*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\”

编译 NDB 集群的 CMake 选项

在构建带有 NDB 集群支持的 MySQL 源代码时,请使用以下选项。

-DMEMCACHED_HOME=*dir_name*
NDB 在 NDB 8.0.23 中移除了对 memcached 的支持;因此,在此版本或更高版本中不再支持使用此选项构建 NDB。
-DNDB_UTILS_LINK_DYNAMIC={ON|OFF}
控制 NDB 实用程序(如 ndb_drop_table)是否静态链接(OFF)或动态链接(ON)到 ndbclient;默认为静态链接(OFF)。通常在构建这些工具时使用静态链接以避免 LD_LIBRARY_PATH 的问题,或者当安装了多个版本的 ndbclient 时使用。此选项适用于创建 Docker 镜像和可能需要精确控制目标环境并希望减小镜像大小的情况。
在 NDB 8.0.22 中添加。
-DWITH_BUNDLED_LIBEVENT={ON|OFF}
NDB 在 NDB 8.0.23 中移除了对 memcached 的支持;因此,在此版本或更高版本中不再支持使用此选项构建 NDB。
-DWITH_BUNDLED_MEMCACHED={ON|OFF}
NDB 在 NDB 8.0.23 中移除了对 memcached 的支持;因此,在此版本或更高版本中不再支持使用此选项构建 NDB。
-DWITH_CLASSPATH=*path*
设置构建 MySQL NDB 集群 Java 连接器的类路径。默认为空。如果使用 -DWITH_NDB_JAVA=OFF,则忽略此选项。
-DWITH_ERROR_INSERT={ON|OFF}
启用 NDB 内核中的错误注入。仅用于测试;不适用于构建生产二进制文件。默认为 OFF。
-DWITH_NDB={ON|OFF}
构建 MySQL NDB 集群;构建 NDB 插件和所有 NDB 集群程序。
在 NDB 8.0.31 中添加。
-DWITH_NDBAPI_EXAMPLES={ON|OFF}
在storage/ndb/ndbapi-examples/中构建 NDB API 示例程序。有关这些示例的信息,请参阅 NDB API 示例。
-DWITH_NDBCLUSTER_STORAGE_ENGINE={ON|OFF}
NDB 8.0.30 及更早版本:仅供内部使用;可能不总是按预期工作。要构建带有NDB支持的内容,请改用WITH_NDBCLUSTER。
NDB 8.0.31 及更高版本:仅控制ndbcluster插件是否包含在构建中;WITH_NDB会自动启用此选项,因此建议您改用WITH_NDB。
-DWITH_NDBCLUSTER={ON|OFF}
在mysqld中构建并链接对NDB存储引擎的支持。
从 NDB 8.0.31 开始,此选项已弃用,并将最终删除;请改用WITH_NDB。
-DWITH_NDBMTD={ON|OFF}
构建多线程数据节点可执行文件ndbmtd。默认值为ON。
-DWITH_NDB_DEBUG={ON|OFF}
启用构建 NDB 集群二进制文件的调试版本。默认值为OFF。
-DWITH_NDB_JAVA={ON|OFF}
启用构建带有 Java 支持的 NDB 集群,包括对 ClusterJ 的支持(请参阅 MySQL NDB 集群 Java 连接器)。
默认情况下,此选项为ON。如果不希望使用 Java 支持编译 NDB 集群,则在运行CMake时必须显式禁用它,即指定-DWITH_NDB_JAVA=OFF。否则,如果找不到 Java,则构建配置将失败。
-DWITH_NDB_PORT=*port*
导致构建的 NDB 集群管理服务器(ndb_mgmd)默认使用此*port*。如果未设置此选项,则生成的管理服务器默认尝试使用端口 1186。
-DWITH_NDB_TEST={ON|OFF}
如果启用,将包括一组 NDB API 测试程序。默认值为OFF。
-DWITH_PLUGIN_NDBCLUSTER={ON|OFF}
仅供内部使用;可能不总是按预期工作。此选项在 NDB 8.0.31 中已移除;请改用WITH_NDB来构建 MySQL NDB 集群。(NDB 8.0.30 及更早版本:请使用WITH_NDBCLUSTER。)
们可能导致意外结果,并且由您自行承担风险。
-DOPTIMIZE_SANITIZER_BUILDS=*bool*
是否将 -O1 -fno-inline 添加到 sanitizer 构建中。默认值为 ON。

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

在提供自己的编译器标志时,您可能希望同时指定CMAKE_BUILD_TYPE。

例如,在 64 位 Linux 机器上创建 32 位发布构建,可以执行以下操作:

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

如果设置影响优化的标志(-O*number*),则必须设置 CMAKE_C_FLAGS_*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\”

编译 NDB 集群的 CMake 选项

在构建带有 NDB 集群支持的 MySQL 源代码时,请使用以下选项。

-DMEMCACHED_HOME=*dir_name*
NDB 在 NDB 8.0.23 中移除了对 memcached 的支持;因此,在此版本或更高版本中不再支持使用此选项构建 NDB。
-DNDB_UTILS_LINK_DYNAMIC={ON|OFF}
控制 NDB 实用程序(如 ndb_drop_table)是否静态链接(OFF)或动态链接(ON)到 ndbclient;默认为静态链接(OFF)。通常在构建这些工具时使用静态链接以避免 LD_LIBRARY_PATH 的问题,或者当安装了多个版本的 ndbclient 时使用。此选项适用于创建 Docker 镜像和可能需要精确控制目标环境并希望减小镜像大小的情况。
在 NDB 8.0.22 中添加。
-DWITH_BUNDLED_LIBEVENT={ON|OFF}
NDB 在 NDB 8.0.23 中移除了对 memcached 的支持;因此,在此版本或更高版本中不再支持使用此选项构建 NDB。
-DWITH_BUNDLED_MEMCACHED={ON|OFF}
NDB 在 NDB 8.0.23 中移除了对 memcached 的支持;因此,在此版本或更高版本中不再支持使用此选项构建 NDB。
-DWITH_CLASSPATH=*path*
设置构建 MySQL NDB 集群 Java 连接器的类路径。默认为空。如果使用 -DWITH_NDB_JAVA=OFF,则忽略此选项。
-DWITH_ERROR_INSERT={ON|OFF}
启用 NDB 内核中的错误注入。仅用于测试;不适用于构建生产二进制文件。默认为 OFF。
-DWITH_NDB={ON|OFF}
构建 MySQL NDB 集群;构建 NDB 插件和所有 NDB 集群程序。
在 NDB 8.0.31 中添加。
-DWITH_NDBAPI_EXAMPLES={ON|OFF}
在storage/ndb/ndbapi-examples/中构建 NDB API 示例程序。有关这些示例的信息,请参阅 NDB API 示例。
-DWITH_NDBCLUSTER_STORAGE_ENGINE={ON|OFF}
NDB 8.0.30 及更早版本:仅供内部使用;可能不总是按预期工作。要构建带有NDB支持的内容,请改用WITH_NDBCLUSTER。
NDB 8.0.31 及更高版本:仅控制ndbcluster插件是否包含在构建中;WITH_NDB会自动启用此选项,因此建议您改用WITH_NDB。
-DWITH_NDBCLUSTER={ON|OFF}
在mysqld中构建并链接对NDB存储引擎的支持。
从 NDB 8.0.31 开始,此选项已弃用,并将最终删除;请改用WITH_NDB。
-DWITH_NDBMTD={ON|OFF}
构建多线程数据节点可执行文件ndbmtd。默认值为ON。
-DWITH_NDB_DEBUG={ON|OFF}
启用构建 NDB 集群二进制文件的调试版本。默认值为OFF。
-DWITH_NDB_JAVA={ON|OFF}
启用构建带有 Java 支持的 NDB 集群,包括对 ClusterJ 的支持(请参阅 MySQL NDB 集群 Java 连接器)。
默认情况下,此选项为ON。如果不希望使用 Java 支持编译 NDB 集群,则在运行CMake时必须显式禁用它,即指定-DWITH_NDB_JAVA=OFF。否则,如果找不到 Java,则构建配置将失败。
-DWITH_NDB_PORT=*port*
导致构建的 NDB 集群管理服务器(ndb_mgmd)默认使用此*port*。如果未设置此选项,则生成的管理服务器默认尝试使用端口 1186。
-DWITH_NDB_TEST={ON|OFF}
如果启用,将包括一组 NDB API 测试程序。默认值为OFF。
-DWITH_PLUGIN_NDBCLUSTER={ON|OFF}
仅供内部使用;可能不总是按预期工作。此选项在 NDB 8.0.31 中已移除;请改用WITH_NDB来构建 MySQL NDB 集群。(NDB 8.0.30 及更早版本:请使用WITH_NDBCLUSTER。)

#以上关于MySQL8 中文参考(五)的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92416.html

(0)
CSDN的头像CSDN
上一篇 2024年6月27日
下一篇 2024年6月27日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注