文档首页
MySQL 8.4 参考手册
相关文档 下载此手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  使用 systemd 管理 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.4 安全部署指南 的安装后设置部分中提供的说明手动配置 systemd 对 MySQL 的支持。

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

以下讨论涵盖以下主题:

注意

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

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

由于 systemd 能够管理为 MySQL 安装了 systemd 支持的平台上的多个 MySQL 实例,因此 mysqld_multimysqld_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 服务的详细信息。

  • [email protected] (RPM 平台)、[email protected] (Debian 平台):与 mysqld.servicemysql.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

使用 systemd,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,而不是使用 open_files_limit 系统变量用于 mysqld--open-files-limit 选项用于 mysqld_safe

  • 要设置最大核心文件大小,请在 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.4 中,mysqld 使用 Type=notify 进程启动类型。(Type=forking 用于 MySQL 5.7。)对于 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 实例

本节介绍如何在系统安装了 systemd 支持的平台上为多个 MySQL 实例配置 systemd。

注意

由于 systemd 能够管理安装了 systemd 支持的平台上的多个 MySQL 实例,因此 mysqld_multimysqld_multi.server 不需要且不会安装。

要使用多实例功能,请修改 my.cnf 选项文件以包含每个实例的关键选项的配置。这些文件位置很典型

  • /etc/my.cnf/etc/mysql/my.cnf(RPM 平台)

  • /etc/mysql/mysql.conf.d/mysqld.cnf(Debian 平台)

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

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 会自动使用不同的单元文件

在单元文件中,%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 过程。例如,mysqld_safe 用于启用 syslog 日志记录的选项是 --syslog,该选项已弃用。要将错误日志输出写入系统日志,请使用 第 7.4.2.8 节“将错误日志记录到系统日志” 中的说明。

  • mysqld_safe 选项不被 mysqld 识别,可以在 override.conf 或环境变量中指定。例如,对于 mysqld_safe,如果服务器应该使用特定的内存分配库,则使用 --malloc-lib 选项指定。对于使用 systemd 管理服务器的安装,请安排设置 LD_PRELOAD 环境变量,如前所述。