MySQL8 中文参考(五)
2.5.5 使用 Oracle 的 Debian 软件包在 Linux 上安装 MySQL
原文:
dev.mysql.com/doc/refman/8.0/en/linux-installation-debian.html
Oracle 提供了用于在 Debian 或类似 Debian 的 Linux 系统上安装 MySQL 的 Debian 软件包。这些软件包通过两个不同的渠道提供:
-
MySQL APT 存储库。这是在类似 Debian 的系统上安装 MySQL 的首选方法,因为它提供了一种简单方便的方式来安装和更新 MySQL 产品。详情请参阅 Section 2.5.2, “使用 MySQL APT 存储库在 Linux 上安装 MySQL”。
-
MySQL 开发者区下载区。详情请参阅 Section 2.1.3, “如何获取 MySQL”。以下是有关那里提供的 Debian 软件包以及安装说明的一些信息:
-
MySQL 开发者区提供了各种 Debian 软件包,用于在当前的 Debian 和 Ubuntu 平台上安装 MySQL 的不同组件。首选方法是使用 tarball 捆绑包,其中包含了 MySQL 基本设置所需的软件包。tarball 捆绑包的名称格式为
mysql-server_*MVER*-*DVER*_*CPU*.deb-bundle.tar。*MVER是 MySQL 版本,DVER是 Linux 发行版版本。CPU*值表示软件包构建的处理器类型或系列,如下表所示:表 2.13 MySQL Debian 和 Ubuntu 安装软件包 CPU 标识符
CPU值预期处理器类型或系列 i386奔腾处理器或更高版本,32 位 amd6464 位 x86 处理器 -
下载 tarball 后,使用以下命令解压缩:
$> tar -xvf mysql-server_*MVER*-*DVER*_*CPU*.deb-bundle.tar -
如果系统中尚未安装
libaio库,则可能需要安装:$> sudo apt-get install libaio1 -
使用以下命令预配置 MySQL 服务器软件包:
$> sudo dpkg-preconfigure mysql-community-server_*.deb您将被要求为 MySQL 安装的 root 用户提供密码。您可能还会被问及有关安装的其他问题。
重要
确保记住您设置的 root 密码。想要稍后设置密码的用户可以在对话框中将密码字段留空,然后只需按下 OK;在这种情况下,使用 Unix 套接字文件进行连接的服务器的 root 访问权限是通过 MySQL 套接字对等凭证认证插件进行验证。您可以稍后使用mysql_secure_installation设置 root 密码。
-
对于 MySQL 服务器的基本安装,安装数据库公共文件包、客户端包、客户端元包、服务器包和服务器元包(按照这个顺序);你可以使用一个命令完成这些操作:
$> sudo dpkg -i mysql-{common,community-client-plugins,community-client-core,community-client,client,community-server-core,community-server,server}_*.deb还有一些包的包名中带有
server-core和client-core。这些只包含二进制文件,并且会被标准包自动安装。单独安装它们并不会导致 MySQL 的正常运行。如果dpkg(如 libmecab2)提示存在未满足的依赖关系,你可以使用apt-get来解决:
sudo apt-get -f install下面是系统上文件的安装位置:
-
所有配置文件(如
my.cnf)都位于/etc/mysql -
所有二进制文件、库文件、头文件等都位于
/usr/bin和/usr/sbin -
数据目录位于
/var/lib/mysql
-
-
注意
Debian 发行版的 MySQL 也由其他供应商提供。请注意,它们可能在功能、能力和约定(包括通信设置)方面与 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 服务器
-
容器 Shell 访问
-
停止和删除 MySQL 容器
-
升级 MySQL 服务器容器
-
使用 Docker 部署 MySQL 服务器的更多主题
下载 MySQL 服务器 Docker 镜像
重要
对于 MySQL 企业版用户:使用 Docker 镜像需要订阅 MySQL 企业版。订阅采用自带许可证模式;详细信息请参阅如何购买 MySQL 产品和服务。
在单独的步骤中下载服务器镜像并不是绝对必要的;但是,在创建 Docker 容器之前执行此步骤可以确保您的本地镜像是最新的。要从Oracle 容器注册表(OCR)下载 MySQL 社区版镜像,请运行以下命令:
docker pull container-registry.oracle.com/mysql/community-server:*tag*
tag是您想要拉取的镜像版本的标签(例如,5.7,8.0或latest)。如果:*tag***被省略,则使用latest标签,并下载 MySQL 社区服务器最新 GA 版本的镜像。
要从 OCR 下载 MySQL 企业版镜像,您需要首先在 OCR 上接受许可协议,并使用 Docker 客户端登录到容器仓库。请按照以下步骤操作:
-
访问 OCR 网站
container-registry.oracle.com/并选择 MySQL。 -
在 MySQL 仓库列表中选择
enterprise-server。 -
如果您尚未登录到 OCR,请点击页面右侧的“登录”按钮,然后在提示时输入您的 Oracle 帐户凭据。
-
按照页面右侧的说明接受许可协议。
-
使用例如
docker login命令登录到 OCR 客户端:# docker login container-registry.oracle.com Username: *Oracle-Account-ID* Password: *password* Login successful.
使用以下命令从 OCR 下载 MySQL Enterprise Edition 镜像:
docker pull container-registry.oracle.com/mysql/enterprise-server:*tag*
要从My Oracle Support网站下载 MySQL Enterprise Edition 镜像,请进入网站,登录到您的 Oracle 帐户,然后在登陆页面执行以下步骤:
-
选择“补丁和更新”选项卡。
-
转到“补丁搜索”区域,在“搜索”选项卡上切换到“产品”或“家族(高级)”子选项卡。
-
在“产品”字段中输入“MySQL Server”,在“版本”字段中输入所需的版本号。
-
使用下拉菜单进行额外的筛选以选择“描述—包含”,并在文本字段中输入“Docker”。
下图显示了 MySQL Server 8.0 的 MySQL Enterprise Edition 镜像的搜索设置:
-
点击“搜索”按钮,从结果列表中选择您想要的版本,然后点击“下载”按钮。
-
在弹出的文件下载对话框中,点击并下载 Docker 镜像的
.zip文件。
解压下载的 .zip 存档以获取内部的 tarball(mysql-enterprise-server-*version*.tar),然后运行以下命令加载镜像:
docker load -i mysql-enterprise-server-*version*.tar
您可以使用以下命令列出已下载的 Docker 镜像:
$> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
container-registry.oracle.com/mysql/community-server latest 1d9c2219ff69 2 months ago 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 -d container-registry.oracle.com/mysql/community-server:latest
要使用从 OCR 下载的 Docker 镜像启动 MySQL Enterprise Server 的新 Docker 容器,请使用此命令:
docker run --name=mysql1 --restart on-failure -d container-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 镜像尚未通过早期的docker pull或docker run命令下载,那么现在将下载该镜像。容器的初始化开始,并且当你运行docker ps命令时,容器将出现在正在运行的容器列表中。例如:
$> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cd4129b3211 container-registry.oracle.com/mysql/community-server:latest "/entrypoint.sh mysq…" 8 seconds ago Up 7 seconds (health: starting) 3306/tcp, 33060-33061/tcp mysql1
容器初始化可能需要一些时间。当服务器准备就绪时,docker ps命令输出中容器的STATUS从(health: starting)变为(healthy)。
上述docker run命令中使用的-d选项使容器在后台运行。使用此命令监视容器的输出:
docker logs mysql1
一旦初始化完成,命令的输出将包含为 root 用户生成的随机密码;例如,使用此命令检查密码:
$> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs
从容器内连接到 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' IDENTIFIED BY '*password*';
用你选择的密码替换*password*。一旦密码重置,服务器就可以使用了。
容器 Shell 访问
要访问你的 MySQL 服务器容器的 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 client-cert.pem ib_buffer_pool ib_logfile1 ibtmp1 mysql.sock performance_schema public_key.pem server-key.pem
停止和删除 MySQL 容器
要停止我们创建的 MySQL 服务器容器,请使用此命令:
docker stop mysql1
docker stop向mysqld进程发送 SIGTERM 信号,以便服务器正常关闭。
还要注意,当容器的主要进程(在 MySQL 服务器容器的情况下为mysqld)停止时,Docker 容器会自动停止。
要再次启动 MySQL 服务器容器:
docker start mysql1
要一次性停止和重新启动 MySQL 服务器容器:
docker restart mysql1
要删除 MySQL 容器,首先停止它,然后使用docker rm命令:
docker stop mysql1
docker rm mysql1
如果希望同时删除服务器数据目录的 Docker 卷,请在docker rm命令中添加-v选项。
升级 MySQL 服务器容器
重要提示
-
在对 MySQL 进行任何升级之前,请仔细遵循第三章,升级 MySQL中的说明。在那里讨论的其他说明中,特别重要的是在升级之前备份数据库。
-
本节中的说明要求服务器的数据和配置已经在主机上持久化。详细信息请参见持久化数据和配置更改。
按照以下步骤将 Docker 安装的 MySQL 5.7 升级到 8.0:
-
停止 MySQL 5.7 服务器(在此示例中容器名称为
mysql57):docker stop mysql57 -
下载 MySQL 8.0 服务器 Docker 镜像。请参见下载 MySQL 服务器 Docker 镜像中的说明。确保使用正确的 MySQL 8.0 标签。
-
使用旧服务器数据和配置(如果需要进行适当修改,请参见第三章,升级 MySQL)在主机上持久化(在此示例中通过绑定挂载)。对于 MySQL Community Server,请运行以下命令:
docker run --name=mysql80 \ --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:8.0如果需要,将
container-registry.oracle.com/mysql/community-server调整为正确的镜像名称,例如,从 OCR 下载的 MySQL Enterprise Edition 镜像替换为container-registry.oracle.com/mysql/enterprise-server,或者从 My Oracle Support 下载的 MySQL Enterprise Edition 镜像替换为mysql/enterprise-server。 -
等待服务器完成启动。您可以使用docker ps命令(请参见启动 MySQL 服务器实例)来检查服务器的状态。
对于在 8.0 系列内升级(即从版本 8.0.x 到 8.0.y)的相同步骤:停止原始容器,然后在旧服务器数据和配置上启动一个新容器。如果您在启动原始容器时使用了 8.0 或 latest 标签,并且现在有一个新的 MySQL 8.0 版本需要升级,您必须首先使用以下命令拉取新版本的镜像:
docker pull container-registry.oracle.com/mysql/community-server:8.0
然后,您可以通过在旧数据和配置上启动一个新容器来升级(如果您使用的是 MySQL 企业版,请调整镜像名称;请参阅下载 MySQL 服务器 Docker 镜像):
docker run --name=mysql80new \
--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: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 restart mysql80
使用 Docker 部署 MySQL 服务器的更多主题
有关使用 Docker 部署 MySQL 服务器的更多主题,如服务器配置、持久化数据和配置、服务器错误日志和容器环境变量,请参阅第 2.5.6.2 节,“使用 Docker 部署 MySQL 服务器的更多主题”。
原文:
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 命令);如果你的镜像来自其他仓库,请进行更改,例如,用 container-registry.oracle.com/mysql/enterprise-server 替换从 Oracle Container Registry (OCR) 下载的 MySQL Enterprise Edition 镜像,或者用 mysql/enterprise-server 替换从 My Oracle Support 下载的 MySQL Enterprise Edition 镜像。
-
为 Docker 优化的 MySQL 安装
-
配置 MySQL 服务器
-
持久化数据和配置更改
-
运行额外的初始化脚本
-
从另一个 Docker 容器中的应用连接到 MySQL
-
服务器错误日志
-
在 Docker 中使用 MySQL Enterprise Backup
-
在 Docker 中使用 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 服务器
如果您在以下 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_OPTSsystemd 变量。
要使用本地化的 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.confsystemd 文件。注意
在 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
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
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文件:使用 GNUgunzip解压分发文件,然后使用一个合理的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/获取。 -
对于
.zipZip 归档文件:WinZip或其他能够读取.zip文件的工具。 -
对于
.rpmRPM 软件包:用于构建分发的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_SSLCMake 选项确定用于编译 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.18 | ||
BUILD_CONFIG | 使用与官方发布相同的构建选项 | |||
BUNDLE_RUNTIME_LIBRARIES | 将运行时库与 Windows 服务器 MSI 和 Zip 软件包捆绑在一起 | OFF | ||
CMAKE_BUILD_TYPE | 生成的构建类型 | RelWithDebInfo | ||
CMAKE_CXX_FLAGS | C++编译器标志 | |||
CMAKE_C_FLAGS | C 编译器标志 | |||
CMAKE_INSTALL_PREFIX | 安装基本目录 | /usr/local/mysql | ||
COMPILATION_COMMENT | 编译环境注释 | |||
COMPILATION_COMMENT_SERVER | 用于 mysqld 使用的编译环境注释 | 8.0.14 | ||
COMPRESS_DEBUG_SECTIONS | 压缩二进制可执行文件的调试部分 | OFF | 8.0.22 | |
CPACK_MONOLITHIC_INSTALL | 包构建是否生成单个文件 | OFF | ||
DEFAULT_CHARSET | 默认服务器字符集 | utf8mb4 | ||
DEFAULT_COLLATION | 默认服务器排序规则 | utf8mb4_0900_ai_ci | ||
DISABLE_PSI_COND | 排除性能模式条件仪表化 | OFF | ||
DISABLE_PSI_DATA_LOCK | 排除性能模式数据锁定仪表化 | OFF | ||
DISABLE_PSI_ERROR | 排除性能模式服务器错误仪表化 | OFF | ||
DISABLE_PSI_FILE | 排除性能模式文件仪表化 | OFF | ||
DISABLE_PSI_IDLE | 排除性能模式空闲仪表化 | OFF | ||
DISABLE_PSI_MEMORY | 排除性能模式内存仪器 | OFF | ||
DISABLE_PSI_METADATA | 排除性能模式 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 | 排除性能模式 stage 仪器 | OFF | ||
DISABLE_PSI_STATEMENT | 排除性能模式语句仪器 | OFF | ||
DISABLE_PSI_STATEMENT_DIGEST | 排除性能模式 statements_digest 仪器 | OFF | ||
DISABLE_PSI_TABLE | 排除性能模式表仪器 | OFF | ||
DISABLE_PSI_THREAD | 排除性能模式线程仪器 | OFF | ||
DISABLE_PSI_TRANSACTION | 排除性能模式事务仪器 | OFF | ||
DISABLE_SHARED | 不构建共享库,编译位置相关代码 | OFF | 8.0.18 | |
DOWNLOAD_BOOST | 是否下载 Boost 库 | OFF | ||
DOWNLOAD_BOOST_TIMEOUT | 下载 Boost 库的超时时间(秒) | 600 | ||
ENABLED_LOCAL_INFILE | 是否启用 LOAD DATA 的 LOCAL 功能 | OFF | ||
ENABLED_PROFILING | 是否启用查询分析代码 | ON | ||
ENABLE_DOWNLOADS | 是否下载可选文件 | OFF | 8.0.26 | |
ENABLE_EXPERIMENTAL_SYSVARS | 是否启用实验性 InnoDB 系统变量 | OFF | ||
ENABLE_GCOV | 是否包含 gcov 支持 | |||
ENABLE_GPROF | 启用 gprof(仅优化的 Linux 构建) | OFF | ||
FORCE_COLORED_OUTPUT | 是否给编译输出着色 | OFF | 8.0.33 | |
FORCE_INSOURCE_BUILD | 是否强制在源代码构建 | OFF | 8.0.14 | |
FORCE_UNSUPPORTED_COMPILER | 是否允许不支持的编译器 | OFF | ||
FPROFILE_GENERATE | 是否生成配置引导优化数据 | OFF | 8.0.19 | |
FPROFILE_USE | 是否使用配置引导优化数据 | OFF | 8.0.19 | |
HAVE_PSI_MEMORY_INTERFACE | 启用性能模式内存跟踪模块,用于动态存储超对齐类型的内存分配函数 | OFF | 8.0.26 | |
IGNORE_AIO_CHECK | 使用 -DBUILD_CONFIG=mysql_release 时,忽略 libaio 检查 | OFF | ||
INSTALL_BINDIR | 用户可执行文件目录 | PREFIX/bin | ||
INSTALL_DOCDIR | 文档目录 | PREFIX/docs | ||
INSTALL_DOCREADMEDIR | README 文件目录 | PREFIX | ||
INSTALL_INCLUDEDIR | 头文件目录 | PREFIX/include | ||
INSTALL_INFODIR | 信息文件目录 | PREFIX/docs | ||
INSTALL_LAYOUT | 选择预定义的安装布局 | STANDALONE | ||
INSTALL_LIBDIR | 库文件目录 | PREFIX/lib | ||
INSTALL_MANDIR | 手册页目录 | PREFIX/man | ||
INSTALL_MYSQLKEYRINGDIR | keyring_file 插件数据文件目录 | 特定于平台 | ||
INSTALL_MYSQLSHAREDIR | 共享数据目录 | PREFIX/share | ||
INSTALL_MYSQLTESTDIR | mysql-test 目录 | PREFIX/mysql-test | ||
INSTALL_PKGCONFIGDIR | mysqlclient.pc pkg-config 文件目录 | INSTALL_LIBDIR/pkgconfig | ||
INSTALL_PLUGINDIR | 插件目录 | PREFIX/lib/plugin | ||
INSTALL_PRIV_LIBDIR | 安装私有库目录 | 8.0.18 | ||
INSTALL_SBINDIR | 服务器可执行文件目录 | PREFIX/bin | ||
INSTALL_SECURE_FILE_PRIVDIR | secure_file_priv 默认值 | 特定于平台 | ||
INSTALL_SHAREDIR | aclocal/mysql.m4 安装目录 | PREFIX/share | ||
INSTALL_STATIC_LIBRARIES | 是否安装静态库 | ON | ||
INSTALL_SUPPORTFILESDIR | 额外支持文件目录 | PREFIX/support-files | ||
LINK_RANDOMIZE | 是否随机化 mysqld 二进制文件中符号的顺序 | OFF | ||
LINK_RANDOMIZE_SEED | LINK_RANDOMIZE 选项的种子值 | mysql | ||
MAX_INDEXES | 每个表的最大索引数 | 64 | ||
MEMCACHED_HOME | memcached 路径;已过时 | [none] | 8.0.23 | |
MSVC_CPPCHECK | 启用 MSVC 代码分析。 | OFF | 8.0.33 | |
MUTEX_TYPE | InnoDB 互斥类型 | event | ||
MYSQLX_TCP_PORT | X 插件使用的 TCP/IP 端口号 | 33060 | ||
MYSQLX_UNIX_ADDR | X 插件使用的 Unix 套接字文件 | /tmp/mysqlx.sock | ||
MYSQL_DATADIR | 数据目录 | |||
MYSQL_MAINTAINER_MODE | 是否启用 MySQL 维护者特定的开发环境 | OFF | ||
MYSQL_PROJECT_NAME | Windows/macOS 项目名称 | MySQL | ||
MYSQL_TCP_PORT | TCP/IP 端口号 | 3306 | ||
MYSQL_UNIX_ADDR | Unix 套接字文件 | /tmp/mysql.sock | ||
NDB_UTILS_LINK_DYNAMIC | 使 NDB 工具动态链接到 ndbclient | 8.0.22 | ||
ODBC_INCLUDES | ODBC 包含目录 | |||
ODBC_LIB_DIR | ODBC 库目录 | |||
OPTIMIZER_TRACE | 是否支持优化器跟踪 | |||
OPTIMIZE_SANITIZER_BUILDS | 是否优化 sanitizer 构建 | ON | 8.0.34 | |
REPRODUCIBLE_BUILD | 特别注意创建与构建位置和时间无关的构建结果 | |||
SHOW_SUPPRESSED_COMPILER_WARNING | 是否显示被抑制的编译器警告并且不使用-Werror 失败。 | OFF | 8.0.30 | |
SYSCONFDIR | 选项文件目录 | |||
SYSTEMD_PID_DIR | systemd 下 PID 文件目录 | /var/run/mysqld | ||
SYSTEMD_SERVICE_NAME | systemd 下 MySQL 服务的名称 | mysqld | ||
TMPDIR | tmpdir 默认值 | |||
USE_LD_GOLD | 是否使用 GNU gold 链接器 | ON | 8.0.31 | |
USE_LD_LLD | 是否使用 LLVM lld 链接器 | ON | 8.0.16 | |
WIN_DEBUG_NO_INLINE | 是否禁用函数内联 | OFF | ||
WITHOUT_SERVER | 不构建服务器 | OFF | ||
WITHOUT_xxx_STORAGE_ENGINE | 从构建中排除存储引擎 xxx | |||
WITH_ANT | 用于构建 GCS Java 包装器的 Ant 路径 | |||
WITH_ASAN | 启用 AddressSanitizer | OFF | ||
WITH_ASAN_SCOPE | 启用 AddressSanitizer 的 -fsanitize-address-use-after-scope Clang 标志 | OFF | ||
WITH_AUTHENTICATION_CLIENT_PLUGINS | 如果构建了相应的服务器认证插件,则自动启用 | 8.0.26 | ||
WITH_AUTHENTICATION_LDAP | 是否在无法构建 LDAP 认证插件时报告错误 | OFF | ||
WITH_AUTHENTICATION_PAM | 构建 PAM 认证插件 | OFF | ||
WITH_AWS_SDK | Amazon Web Services 软件开发工具包的位置 | |||
WITH_BOOST | Boost 库源代码的位置 | |||
WITH_BUILD_ID | 在 Linux 系统上生成唯一的构建 ID | ON | 8.0.31 | |
WITH_BUNDLED_LIBEVENT | 在构建 ndbmemcache 时使用捆绑的 libevent;已过时 | ON | 8.0.23 | |
WITH_BUNDLED_MEMCACHED | 在构建 ndbmemcache 时使用捆绑的 memcached;已过时 | ON | 8.0.23 | |
WITH_CLASSPATH | 构建 MySQL Cluster Connector for Java 时要使用的类路径。默认为空字符串。 | |||
WITH_CLIENT_PROTOCOL_TRACING | 构建客户端协议跟踪框架 | ON | ||
WITH_CURL | curl 库的位置 | |||
WITH_DEBUG | 是否包含调试支持 | OFF | ||
WITH_DEFAULT_COMPILER_OPTIONS | 是否使用默认编译器选项 | ON | ||
WITH_DEFAULT_FEATURE_SET | 是否使用默认功能集 | ON | 8.0.22 | |
WITH_DEVELOPER_ENTITLEMENTS | 是否在 macOS 上为所有可执行文件添加 'get-task-allow' 权限,以便在服务器意外停止时生成核心转储 | OFF | 8.0.30 | |
WITH_EDITLINE | 使用哪个 libedit/editline 库 | bundled | ||
WITH_ERROR_INSERT | 启用 NDB 存储引擎中的错误注入。不应用于构建用于生产的二进制文件。 | OFF | ||
WITH_FIDO | FIDO 库支持类型 | bundled | 8.0.27 | |
WITH_GMOCK | googlemock 分发路径 | 8.0.26 | ||
WITH_ICU | ICU 支持类型 | bundled | ||
WITH_INNODB_EXTRA_DEBUG | 是否包含 InnoDB 的额外调试支持。 | OFF | ||
WITH_INNODB_MEMCACHED | 是否生成 memcached 共享库。 | OFF | ||
WITH_JEMALLOC | 是否链接 -ljemalloc | OFF | 8.0.16 | |
WITH_KEYRING_TEST | 构建密钥环测试程序 | OFF | ||
WITH_LIBEVENT | 使用哪个 libevent 库 | bundled | ||
WITH_LIBWRAP | 是否包含 libwrap(TCP wrappers)支持 | OFF | ||
WITH_LOCK_ORDER | 是否启用 LOCK_ORDER 工具 | OFF | 8.0.17 | |
WITH_LSAN | 是否运行 LeakSanitizer,不包括 AddressSanitizer | OFF | 8.0.16 | |
WITH_LTO | 启用链接时优化器 | OFF | 8.0.13 | |
WITH_LZ4 | LZ4 库支持类型 | bundled | ||
WITH_LZMA | LZMA 库支持类型 | bundled | 8.0.16 | |
WITH_MECAB | 编译 MeCab | |||
WITH_MSAN | 启用 MemorySanitizer | OFF | ||
WITH_MSCRT_DEBUG | 启用 Visual Studio CRT 内存泄漏跟踪 | OFF | ||
WITH_MYSQLX | 是否禁用 X 协议 | ON | ||
WITH_NDB | 构建 MySQL NDB 集群 | OFF | 8.0.31 | |
WITH_NDBAPI_EXAMPLES | 构建 API 示例程序 | OFF | ||
WITH_NDBCLUSTER | 构建 NDB 存储引擎 | OFF | ||
WITH_NDBCLUSTER_STORAGE_ENGINE | 供内部使用;在所有情况下可能不起作用;用户应该使用 WITH_NDBCLUSTER 代替 | ON | ||
WITH_NDBMTD | 构建多线程数据节点 | ON | ||
WITH_NDB_DEBUG | 生成用于测试或故障排除的调试构建 | OFF | ||
WITH_NDB_JAVA | 启用构建 Java 和 ClusterJ 支持。默认启用。仅在 MySQL Cluster 中受支持。 | ON | ||
WITH_NDB_PORT | 使用此选项构建的管理服务器使用的默认端口。如果未使用此选项构建它,则管理服务器的默认端口为 1186。 | [none] | ||
WITH_NDB_TEST | 包括 NDB API 测试程序 | OFF | ||
WITH_NUMA | 设置 NUMA 内存分配策略 | |||
WITH_PACKAGE_FLAGS | 用于 RPM/DEB 包通常使用的标志,是否将它们添加到这些平台上的独立构建中 | 8.0.26 | ||
WITH_PLUGIN_NDBCLUSTER | 供内部使用;在所有情况下可能不起作用。用户应该使用 WITH_NDBCLUSTER 或 WITH_NDB 代替 | 8.0.13 | 8.0.31 | |
WITH_PROTOBUF | 使用哪个 Protocol Buffers 包 | bundled | ||
WITH_RAPID | 是否构建快速开发周期插件 | ON | ||
WITH_RAPIDJSON | RapidJSON 支持类型 | bundled | 8.0.13 | |
WITH_RE2 | RE2 库支持类型 | bundled | 8.0.18 | |
WITH_ROUTER | 是否构建 MySQL Router | ON | 8.0.16 | |
WITH_SSL | SSL 支持类型 | system | ||
WITH_SYSTEMD | 启用 systemd 支持文件的安装 | OFF | ||
WITH_SYSTEMD_DEBUG | 启用额外的 systemd 调试信息 | OFF | 8.0.22 | |
WITH_SYSTEM_LIBS | 设置未显式设置的库选项的系统值 | OFF | ||
WITH_TCMALLOC | 是否链接 -ltcmalloc | OFF | 8.0.22 | |
WITH_TEST_TRACE_PLUGIN | 构建测试协议跟踪插件 | OFF | ||
WITH_TSAN | 启用线程检测器 | OFF | ||
WITH_UBSAN | 启用未定义行为检测器 | OFF | ||
WITH_UNIT_TESTS | 使用单元测试编译 MySQL | ON | ||
WITH_UNIXODBC | 启用 unixODBC 支持 | OFF | ||
WITH_VALGRIND | 是否编译 Valgrind 头文件 | OFF | ||
WITH_WIN_JEMALLOC | 包含 jemalloc.dll 的目录路径 | 8.0.29 | ||
WITH_ZLIB | zlib 支持类型 | bundled | ||
WITH_ZSTD | zstd 支持类型 | bundled | 8.0.18 | |
WITH_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/dataINSTALL_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_LAYOUTCMake选项的值;请参阅第 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_LAYOUTCMake 选项的值;请参阅 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_DOWNLOADSCMake选项已被移除,并且如果指定了这些选项,则会被忽略。 -
-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-scopeClang 标志以进行使用后范围检测。默认值为关闭。要使用此选项,必须同时启用-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.(之前的版本使用了fido21.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_DOWNLOADSCMake 选项被移除,并且如果指定了这些选项,则会被忽略。 -
-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库是InnoDBmemcached、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。)