如果在以下Linux平台上使用RPM或Debian包安装MySQL,服务器的启动和关闭由systemd管理:
RPM包平台:
企业Linux版本7及更高版本
SUSE Linux Enterprise Server 12及以上版本
Fedora 29及以上
Debian家族平台:
Debian的平台
Ubuntu的平台
如果您从一个使用systemd的平台上的通用二进制发行版安装MySQL,您可以按照安装后设置部分提供的说明手动配置systemd对MySQL的支持MySQL 8.0安全部署指南.
如果从使用systemd的平台上的源发行版安装MySQL,则通过使用-DWITH_SYSTEMD = 1
CMake选择。看到
systemd提供MySQL服务器的自动启动和关闭。方法还支持手动服务器管理systemctl命令。例如:
壳> systemctl{开始| | |重新启动停止状态}mysqld
或者,使用服务命令(参数反转),该命令与System V系统兼容:
Shell >服务mysqld{开始| | |重新启动停止状态}
为systemctl命令(以及其他选项服务如果MySQL服务名不是mysqld
然后使用合适的名称。例如,使用mysql
而不是mysqld
在debian和SLES系统上。
对systemd的支持包括以下文件:
mysqld.service
(RPM平台),mysql.service
(Debian平台):systemd服务单元配置文件,包含MySQL服务的详细信息。mysqld@.service
(RPM平台),mysql@.service
(Debian平台):像mysqld.service
或mysql.service
,但用于管理多个MySQL实例。mysqld.tmpfiles.d
:包含支持临时文件
特性。此文件安装在名称下mysql.conf
.mysqld_pre_systemd
(RPM平台),mysql-system-start
(Debian平台):支持单元文件的脚本。此脚本仅在日志位置与模式(/var/log/mysql*.log
对于RPM平台,/var/log/mysql/*.log
针对Debian平台)。在其他情况下,错误日志目录必须是可写的,或者错误日志必须存在并且对于运行mysqld的过程。
要添加或更改MySQL的systemd选项,可以使用以下方法:
使用本地化的systemd配置文件。
安排systemd为MySQL服务器进程设置环境变量。
设置
MYSQLD_OPTS
systemd变量。
要使用本地化的systemd配置文件,请创建/etc/systemd/system/mysqld.service.d
目录(如果不存在)。在该目录中,创建一个包含(服务)
部分列出所需的设置。例如:
[服务]LimitNOFILE =max_open_files好=nice_levelLimitCore =core_file_limit环境= " LD_PRELOAD =/道路/ / malloc /库“环境= " TZ =time_zone_setting"
这里的讨论使用override.conf
作为此文件的名称。systemd的新版本支持以下命令,该命令打开编辑器并允许您编辑文件:
systemctl edit mysql # RPM平台
当你创建或更改时override.conf
,重新加载systemd配置,然后告诉systemd重新启动MySQL服务:
systemctl daemon-reload systemctl restart mysqld # RPM平台systemctl restart mysql # Debian平台
在systemd中,theoverride.conf
配置方法必须对某些参数使用配置方法,而不能使用(mysqld)
,(mysqld_safe)
,或(safe_mysqld)
在MySQL选项文件中:
对于某些参数,
override.conf
必须使用,因为systemd本身必须知道它们的值,它不能读取MySQL选项文件来获取它们。指定值的参数,否则只能使用已知的选项设置mysqld_safe必须使用systemd指定,因为没有对应的mysqld参数。
有关使用systemd而不是mysqld_safe,请参阅override.conf:
要设置MySQL服务器可用的文件描述符的数量,请使用
LimitNOFILE
在override.conf
而不是open_files_limit
的系统变量mysqld或——open-files-limit
选择mysqld_safe.若要设置最大核心文件大小,请使用
LimitCore
在override.conf
而不是——核心文件大小
选择mysqld_safe.要设置MySQL服务器的调度优先级,使用
不错的
在override.conf
而不是——好
选择mysqld_safe.
一些MySQL参数是通过环境变量配置的:
有多种方法可以指定systemd管理的MySQL服务器进程使用的环境变量值:
使用
环境
的行override.conf
文件。有关语法,请参阅前面讨论中描述如何使用该文件的示例。中指定值
/etc/sysconfig/mysql
文件(如果文件不存在,则创建该文件)。使用以下语法赋值:LD_PRELOAD =/道路/ / malloc /库TZ =time_zone_setting
修改后
/etc/sysconfig/mysql
,重新启动服务器使更改生效:systemctl restart mysqld # RPM平台systemctl restart mysql # Debian平台
指定以下选项mysqld在不直接修改systemd配置文件的情况下,设置或取消设置MYSQLD_OPTS
systemd变量。例如:
systemctl set-environment MYSQLD_OPTS="——general_log=1
MYSQLD_OPTS
也可以设置在/etc/sysconfig/mysql
文件。
修改完systemd环境后,重启服务器使更改生效:
systemctl restart mysqld # RPM平台systemctl restart mysql # Debian平台
对于使用systemd的平台,如果在服务器启动时为空,则初始化data目录。如果数据目录是一个临时消失的远程挂载,这可能是个问题:挂载点将显示为一个空数据目录,然后将初始化为一个新的数据目录。要抑制这种自动初始化行为,请在/etc/sysconfig/mysql
文件(如果文件不存在就创建它):
NO_INIT = true
介绍如何为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. datadir=/var/lib/mysql-replica01。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=3307 log-error=/var/log/mysql -replica01.log [mysqld@replica02] datadir=/var/lib/mysql-replica02 .logSock port=3308 log-error=/var/log/mysqld-replica02.log
Debian平台:
[mysqld@replica01] datadir=/var/lib/mysql-replica01 socket=/var/lib/mysql-replica01/mysql. datadir=/var/lib/mysql-replica01。Sock port=3307 log-error=/var/log/mysql/replica01.log [mysqld@replica02] datadir=/var/lib/mysql-replica02 socket=/var/lib/mysql-replica02/mysql. log [mysqld@replica02] datadir=/var/lib/mysql-replica02 .log [mysqld@replica02]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状态为“mysqld@replica*”
为了管理同一机器上的多个MySQL实例,systemd自动使用不同的单元文件:
mysqld@.service
而不是mysqld.service
(RPM平台)mysql@.service
而不是mysql.service
(Debian平台)
在单元文件中,%我
而且%我
参数之后传入的参数@
标记和用于管理特定实例。对于这样的命令:
Systemctl start mysqld@replica01
Systemd使用如下命令启动服务器:
mysqld——defaults-group-suffix=@%I…
结果是(服务器)
,(mysqld)
,(mysqld@replica01)
选项组被读取并用于该服务的实例。
在Debian平台上,AppArmor阻止服务器读或写/var/lib/mysql-replica *
,或者默认位置以外的任何位置。中的配置文件必须自定义或禁用该配置文件/etc/apparmor.d/usr.sbin.mysqld
.
在Debian平台上,MySQL卸载的打包脚本目前无法处理mysqld@
实例。在删除或升级包之前,必须先手动停止任何额外的实例。
因为mysqld_safe没有安装在使用systemd管理MySQL的平台上,选项之前为该程序指定(例如,在(mysqld_safe)
或(safe_mysqld)
选项组)必须以另一种方式指定:
一些mysqld_safe期权也是由mysqld并且可以从
(mysqld_safe)
或(safe_mysqld)
选项组到(mysqld)
组。这并不包括——pid文件
,——open-files-limit
,或——好
.要指定这些选项,请使用override.conf
Systemd文件,前面描述过。请注意在系统平台上,使用
(mysqld_safe)
而且(safe_mysqld)
选项组不受支持,可能导致意外行为。对于一些mysqld_safe选择,有选择mysqld程序。例如,mysqld_safe启用选项
syslog
日志记录是——syslog
,不推荐使用。要将错误日志输出写入系统日志,请使用mysqld_safe不理解的选项mysqld可在
override.conf
或者环境变量。例如,mysqld_safe,如果服务器应该使用特定的内存分配库,则使用——malloc-lib
选择。对于使用systemd管理服务器的安装,请安排设置LD_PRELOAD
而是环境变量,如前所述。