使用systemd管理MySQL服务器

news/2025/1/8 18:12:56/

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

1、RPM 包平台

  • 企业Linux版本7及更高版本

  • SUSELinuxEnterprise Server 12及更高版本

  • Fedora 29及更高版本

2、Debian家族平台

  • Debian平台

  • Ubuntu平台

如果您是从使用systemd的平台上的通用二进制版本安装的MySQL,您可以按照后手动配置systemd支持MySQL。

如果您是从使用systemd的平台上的源码分发版本安装的MySQL,请通过使用-DWITH_SYSTEMD=1 CMake选项配置分布来获得systemd对MySQL的支持。

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

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

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

systemd概述

systemd提供自动MySQL服务器启动和关闭。它还支持使用systemctl命令进行手动服务器管理。例如:

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

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

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

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

对systemd的支持包括以下文件:

  • mysqld.service(RPM平台),mysql.service(Debian平台):systemd服务单元配置文件,记录有关于MySQL服务的详细信息。

  • mysqld@.service(RPM平台),mysql@.service(Debian平台):类似mysqld.servicemysql.service,但用于管理多个MySQL实例。

  • mysqld.tmpfiles.d:包含支持tmpfiles特征的信息的文件。该文件以mysql.conf的名称安装。

  • mysqld_pre_systemd(RPM平台),mysql-system-start(Debian平台):单元文件的支持脚本。只有当日志位置与模式匹配时,此脚本才会协助创建错误日志文件(/var/log/mysql*.log对于每1k展现的收入平台,/var/log/mysql/*.log对于Debian平台)。在其他情况下,错误日志文件目录必须是可写的,或者错误日志必须存在并且对于运行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

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

  • 对于某些参数,必须使用override.conf,因为systemd本身必须知道它们的值,并且它无法读取MySQL选项文件来获取它们。

  • 必须使用systemd指定指定值(否则只能使用mysqld_safe已知的选项设置)的参数,因为没有相应的mysqld参数。

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

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

一些MySQL参数是使用环境变量配置的:

  • LD_PRELOAD:如果MySQL服务器应该使用特定的记忆分配库,请设置此变量。

  • NOTIFY_SOCKET:这个环境变量指定mysqld用来与systemd通信启动完成和服务状态改变通知的套接字,它是在启动mysqld服务时由systemd设置的,mysqld服务读取变量设置并写入定义的位置。
  • 在MySQL8.4中,mysqld使用Type=notify进程启动类型。(MySQL5.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_OPTSsystemd变量。例如:

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能够在安装了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平台)

例如,要管理名为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自动使用不同的单元文件:

  • 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

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

1、一些mysqld_safe选项也可以被mysqld理解,并且可以从[mysqld_safe]或[safe_mysqld]选项组移动到[mysqld]组。这不包括--pid-file、--open-files-limit或--nice。要指定这些选项,请使用前面描述的override.confsystemd文件。在systemd平台上,不支持使用[mysqld_safe][safe_mysqld]选项组,这可能会导致意外行为。

2、对于某些mysqld_safe选项,有替代的mysqld过程。例如,启用syslog日志记录的mysqld_safe选项是--syslog,已弃用。

3、mysqld_safe可以在override.conf或环境变量中指定mysqld无法理解的选项。例如,对于mysqld_safe,如果服务器应该使用特定的记忆分配库,则使用--malloc-lib选项指定。对于使用systemd管理服务器的安装,请安排设置LD_PRELOAD环境变量,如前所述。


http://www.ppmy.cn/news/1561339.html

相关文章

AWS EMR基础知识

EMR Overview 知识点:EMR是可简化大数据框架运行的托管集群平台,能以可扩展且具成本效益的方式处理和分析大量数据,应用于大数据分析、数据处理、机器学习、数据湖和数据仓库等场景。注意事项:根据业务需求选择合适的使用场景&am…

快速排序(霍尔法),冒泡排序 【C语言】

冒泡排序 效率低,但是稳定性高 代码 // 冒泡排序 void maopao(int a[]);int main() {int a1[10] {34,78,29,46,12,85,63,92,57,31};printf("\n排序前:\n");print(a1);maopao(a2);printf("冒泡排序后:");print(a2); }//冒泡排序 void maopao(…

Kubernetes容器设计模式

Kubernetes容器设计模式 在容器编排领域,Kubernetes已经成为事实上的标准,为容器化应用程序提供了可靠且可扩展的平台。构建容器化应用与传统应用有着显著差异,因此理解和使用容器设计模式至关重要。本文将探讨Kubernetes中的容器设计模式&a…

SUB输入5V升压充电16.8V芯片HU5912

HU5912芯片,作为航誉微电子有限公司推出的一款高性能升压充电管理IC,自其面世以来,便以其出色的性能和广泛的应用领域,受到了业界的高度关注和赞誉。本文将详细介绍HU5912芯片的技术特点、应用优势、市场定位以及其在各类电子设备…

mysql删除无用用户

1、删除不用的账户 (1) 查看当前已存在账户 mysql> select user,host,password from mysql.user; 或下面的命令 #mysql> sELECT DISTINCT CONCAT(User: ,user,,host,;) AS query FROM mysql.user; --------------------------------------- | query …

MacBook_Xcode_Swift雨燕

Swift Swift Swift Swift是苹果公司开发的现代化编程语言, 专为Apple平台设计。其简洁语法、类型安全、Optionals处理、Playgrounds交互式环境、泛型编程、协议与扩展、闭包功能、枚举与关联值、结构体与类的高效内存管理、异步编程的async/await语法、Swift Packa…

第4章:MongoDB索引

第4章:MongoDB索引 4.1 索引基础 4.1.1 索引的重要性 提高查询性能减少集合扫描支持高效排序 4.1.2 默认索引 // _id字段的默认索引 {"_id": ObjectId("..."),"name": "示例文档" }4.2 索引类型 4.2.1 单字段索引 /…

模拟(算法-6)

模拟简介 模拟就是根据题目要求,比着葫芦画瓢,即直接按照题目要求写就行了 考察的是我们的编码能力 步骤: 演草纸上画图模拟(重要) 代码编写 虽然很多时候此类题比较简单,但是也有例外,如本文第…