使用 systemd 管理多个 MySQL 服务器实例

news2024/11/26 14:55:41

使用 systemd 管理多个 MySQL 服务器实例

文章目录

  • 使用 systemd 管理多个 MySQL 服务器实例
    • 先决条件
      • 支持 systemd 的操作系统
      • 每个实例配置独立的目录和参数
    • 部署多实例环境
      • 1. 配置选项文件
      • 使用 systemd 管理 MySQL 多实例
    • 总结

本文仅讲述使用 RPM 包安装的多个 MySQL 实例如何使用 systemd 进行管理,MySQL 通用二进制包需要自行创建目录和systemd 管理的 mysqld.service 服务文件。

先决条件

支持 systemd 的操作系统

  • RPM 包平台
    • Enterprise Linux variants version 7 及更高版本
    • SUSE Linux Enterprise Server 12 及更高版本
    • Fedora 29 及更高版本
  • Debian 家族平台
    • Debian 平台
    • Ubuntu 平台

每个实例配置独立的目录和参数

  1. 最重要的是 DATADIR 。建议为每个实例配置配置独立的数据目录,在选项文件中配置datadir=数据目录路径
  2. port=port_num控制 TCP/IP 连接的端口号。如果主机有多个网络地址,可以设置bind_address以监听多个地址。
  3. socket={file_name|pipe_name}控制 Unix 套接字文件路径或 Windows 命名管道的名称。在 Windows 上,必须仅为配置为允许命名管道连接的服务器指定不同的管道名称。
  4. log-error[=file_name]选项指定默认的错误日志位置。如果不设置默认为 console ,即 stderr ;如果不指定值,则默认在数据目录下创建 hostname.err 文件;如果指定值而不指定后缀,则在指定 file_name 后加 .err 后缀;如果指定值包含后缀,则使用指定值。
  5. shared-memory-base-name=name选项 仅在 Windows 上使用 。它指定 Windows 服务器使用的共享内存名称,以允许客户端使用共享内存进行连接。必须仅为配置为允许共享内存连接的服务器指定不同的共享内存名称。
  6. (可选)pid-file=file_name选项表示服务器写入其进程 ID 的文件的路径名。systemd 管理的 MySQL 实例并不需要创建 pid 文件来记录进程 ID ,使用 tar 包等安装的 MySQL 用 mysqld_safemysqld_multi 需要它管理进程。
  7. 如果你显式指定了如下参数,则也应为每台服务器指定独立的参数设置:
    • general_log_file=file_name
    • log-bin[=file_name]
    • slow_query_log_file=file_name
    • (推荐)tmpdir=dir_name。为每个实例指定不同的临时目录可以更好的分辨不同实例产生的临时文件,并且,如果使用多个物理磁盘,还可以扩展负载。

注意
如果要使用自定义 tmpdir ,请使用 DATADIR 以外的目录,且必须提前创建并且设置属主为mysql:mysql,否则会报如下错误:

mysqld[18655]: mysqld: Can't get stat of '/var/lib/mysql/tmp/replica04' (OS errno 2 - No such file or directory

可以直接执行如下命令解决:

[root@ic-source mysql]$ sudo -u mysql mkdir tmp/replica04

创建好tmpdir后,再次启动 MySQL 实例即可正常启动。

部署多实例环境

1. 配置选项文件

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

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

推荐的配置是使用简单的实例名,MySQL 官方在线文档中说 “@” 是 systemd 支持的唯一分隔符,是不对的,我参考 systemd 说明实测 systemd 的服务和单元名称支持 下划线(_)、英文句号(.)和@符号。但 MySQL 的 mysqld_pre_systemdmysqldsystemd 支持似乎仅对 @ 作分隔符的多实例名称有很好的支持,其他命名方式可能产生非预期的结果甚至报错。

默认的数据目录是创建在/var/lib/mysql-实例名,实例名是指选项文件中的选项组后缀,是 @ 后面的内容。

极简配置仅需配置Socke、端口号、数据目录,log-error如果未指定会默认生成/var/log/mysql-实例名.log日志文件。

MySQL 官网在线文档举例,使用如下配置文件创建名为 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

你会发现,两个平台仅在log-error的默认名称上有所不同。

下面我给出我的/etc/my.cnf供您参考:

log_timestamps=SYSTEM
#lower_case_table_names=1

[mysqld-8.0]
#GR
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

[mysqld@ics_pc_pri]
port=3306
datadir='/var/lib/mysql/data/ics_pc_pri'
tmpdir='/var/lib/mysql/tmp/ics_pc_pri'
socket='/var/lib/mysql/data/ics_pc_pri/mysql.sock'
log-error='/var/log/mysql-ics_pc_pri.log'
slow_query_log_file='/var/log/slow_query-ics_pc_pri.log'
log-bin='ics_pc_pri-bin'

innodb_buffer_pool_size=2048M
innodb_redo_log_capacity=1G
innodb_flush_method=O_DIRECT_NO_FSYNC

[mysqld@ics_rc01_pri]
port=3307
datadir='/var/lib/mysql/data/ics_rc01_pri'
tmpdir='/var/lib/mysql/tmp/ics_rc01_pri'
socket='/var/lib/mysql/data/ics_rc01_pri/mysql.sock'
log-error='/var/log/mysql-ics_rc01_pri.log'
slow_query_log_file='/var/log/slow_query-ics_rc01_pri.log'
log-bin='ics_rc01_pri-bin'

innodb_buffer_pool_size=1024M
innodb_redo_log_capacity=100M
innodb_flush_method=O_DIRECT_NO_FSYNC

[mysql]
port=3306
socket='/var/lib/mysql/data/ics_pc_pri/mysql.sock'

使用 systemd 管理 MySQL 多实例

systemd 的基础命令格式如下:

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

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

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

而在使用 MySQL 多实例时使用的是mysqld@.service模板服务。
在这里插入图片描述
在同一台服务器上管理多个 MySQL 服务器实例,systemd 自动使用不同的单元文件:

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

在单元文件中,%I和%I引用@标记后传入的参数,并用于管理特定实例。

systemd 使用如下命令启动 MySQL 服务器:

$ mysqld --defaults-group-suffix=@%I $MYSQLD_OPTS

比如,启动上面的 replica01replica02 两个实例。

$ systemctl start mysqld@replica01
$ systemctl start mysqld@replica02

设置它们为开机自启动:

$ systemctl enable mysqld@replica01
$ systemctl enable mysqld@replica02

这里说明一下,/usr/bin/mysqld_pre_systemd是一个 shell 脚本,(/usr/lib/systemd/system/mysqld@.service是一个可编辑的明文普通文件。/usr/bin/mysqld_pre_systemd脚本仍有些缺陷,比如在不显示指定log-error选项时它会为其设置默认值/var/log/mysql-实例名.log,并创建一个以这个默认值为名的空日志文件,而在初始化数据库时却没有使用这个日志文件,导致日志输出在了 stderr 上,随机生成的密码不可见了。同样,如果你不指定datadir选项,/usr/bin/mysqld_pre_systemd脚本默认也会创建一个,却没有在 mysqld 启动时应用。针对此 Bug ,笔者已修改脚本和单元文件解决,稍后将整理提交到 MySQL Forums 。

使用如下命令查看以mysqld@.service为单元模板的的多实例的状态:

$ systemctl status mysqld@*

在这里插入图片描述

总结

使用 systemd 管理 MySQL 多实例的重点在于选项文件的配置,重要选项为datadirportsocketlog-error。如需为每个实例指定独立的tmpdir,需要提前创建。虽然某些选项不指定,/usr/bin/mysqld_pre_systemd脚本会赋予默认值,但却存在缺陷,导致启动时报错,所以不建议使用。

此外,/etc/systemd/system/mysqld.service.d/override.conf这个文件也会影响 systemd 管理 MySQL,但笔者发现其内容默认都是注释掉的,故没有影响。还有一个文件/etc/sysconfig/mysql默认没有创建,也同样会产生影响。

更多详细内容,参见【《MySQL 8.0 参考手册》中文翻译】 专栏 2.5.9 节 使用 systemd 管理 MySQL 服务器实例 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IronXL 2022.12.10926 Crack

关于适用于 .NET 的 IronXL 在 C# 中阅读和编辑 Excel 电子表格,无需 MS Office 或 Excel Interop。 IronXL for .NET 允许开发人员在 .NET 应用程序和网站中读取、生成和编辑 Excel(和其他电子表格文件)。您可以读取和编辑 XLS/XLSX/CSV/TSV…

操作系统-内存管理(内存的分配与回收(非连续分配方式,基本分页存储管理方式,基本地址变换机构))

文章目录1. 基本分页存储管理基本地址变换机构1. 基本分页存储管理 分页存储: 将内存空间分为一个个大小相等的分区(eg:每个分区4KB),每个分区就是一个页框 每个页框有一个编号,即页框号,页框…

C++ 重要笔记与题 (循环-嵌套-数组)

文章目录十 循环10.1 字符与循环10.2 数与循环十一 循环嵌套——不拘一格11.2数学与循环——脉脉相通十 循环 10.1 字符与循环 题1.1&#xff1a;循环输出26个字母&#xff0c;从A-Z。 for(char i A;i<Z;i){cout<<i<<" ";}题1.2&#xff1a;输入某…

第二证券|定增市场回暖 机构争抢优质项目

今年下半年以来&#xff0c;定增商场持续回暖。最新数据显现&#xff0c;到12月13日&#xff0c;下半年以来A股商场实施定增计划的上市公司近200家&#xff0c;比较上半年的133家显着增加。持续回暖的定增商场吸引了不少组织的目光&#xff0c;不只百亿级私募活跃捡拾筹码&…

大学生个人博客网页设计模板 学生个人博客网页成品 简单个人网站作品下载 静态HTML CSS个人网页作业源代码

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

[附源码]Python计算机毕业设计SSM基于java网上心理咨询系统数据分析(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

docke+gitlab+jenkins+springboot

安装Gitlab 开放防火墙端口80和配置映射文件夹 firewall-cmd --zonepublic --add-port80/tcp --permanent firewall-cmd --reload mkdir -p /docker_data/gitlab/{data,logs,config}启动Gitlab容器&#xff08;启动容器之前确保80&#xff0c;443端口没用被占用&#xff0c;被…

通话类型转换流程之AudioCall到VideoCall

目录 概述时序图关键代码关键log总结 一、概述 这里的通话类型指的是语音通话和视频通话&#xff0c;转换包括upgrade/ downgrade升降级&#xff0c;就是语音通话升级为视频通话、视频通话降级为语音通话。升级为视频通话一般就是包括如下图示的4步&#xff0c;MO发起请求&…

Microsoft SharePoint Online 更新功能可能是下一次勒索攻击的目标

Microsoft SharePoint Online是被使用最广泛的内容管理平台之一。但令人担忧的是&#xff0c;最近几年我们发现大部分攻击者可以滥用 SharePoint Online 和 OneDrive for Business 中的某项功能来加密您的所有文件并以此来勒索赎金。 SharePoint Online 据观察发现可能存在潜在…

四旋翼无人机学习第15节--PCB Editor简单绘制封装-手动绘制封装

文章目录1 前言2 class与sub class3 手动绘制3.1 芯片手册分析3.2 手动绘制1 前言 上一篇博客我们学习了获取封装的几种途径&#xff0c;分别是下载&#xff0c;软件生成与软件转化。本次博客开始讲手动绘制封装。 2 class与sub class 参考博客&#xff1a;第11讲、Allegro …

前端高频手写面试题集锦

手写深度比较isEqual 思路&#xff1a;深度比较两个对象&#xff0c;就是要深度比较对象的每一个元素。> 递归 递归退出条件&#xff1a; 被比较的是两个值类型变量&#xff0c;直接用“”判断被比较的两个变量之一为null&#xff0c;直接判断另一个元素是否也为null 提前结…

对受控组件和非受控组件的理解,以及应用场景?

一、受控组件 受控组件&#xff0c;简单来讲&#xff0c;就是受我们控制的组件&#xff0c;组件的状态全程响应外部数据 举个简单的例子&#xff1a; class TestComponent extends React.Component {constructor (props) {super(props);this.state { username: lindaidai }…

从事生活垃圾(含粪便)经营性清扫、收集、运输服务许可证

《城市生活垃圾管理办法》&#xff08;2007年4月28日建设部令第157号公布2015年5月4日修正本&#xff09;第十七条从事城市生活垃圾经营性清扫、收集、运输的企业&#xff0c;应当取得城市生活垃圾经营性清扫、收集、运输服务许可证。 未取得城市生活垃圾经营性清扫、收集、运输…

安卓玩机搞机技巧综合资源-----查看手机硬件全部参数 隐藏参数 多个软件【十七】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

绿色消费积分,共建开放生态,让消费变投资

随着市场的逐渐饱和&#xff0c;不断推出新产品、开拓推广渠道、增加客户量是商家想要实现可持续发展的生存之道。商家为了刺激消费&#xff0c;可以说是无所不用&#xff0c;但还是面临着缺少新用户&#xff0c;推广难&#xff0c;客户活跃度低&#xff0c;复购率低等痛点。 商…

7个用Python就可以搞副业的方法

抢茅台 全民开抢1499元的茅台&#xff0c;你抢到过吗&#xff1f;我表弟去年开始到现在抢到30瓶&#xff0c;一瓶轻松赚1000元。 没想到表弟私信我说&#xff0c;他的茅台都是用软件抢的。 Python是啥&#xff1f;我是2G网了吗&#xff0c;还有这么好用的工具&#xff01;&…

如何把自定义的函数,记录到你的Airtest报告里

1. 前言 熟悉Airtest的同学都知道&#xff0c;像touch、swipe这类核心API&#xff0c;运行之后&#xff0c;都会在Airtest报告里记录一个步骤&#xff1a; 但有很多情况下&#xff0c;我们可能会使用自定义的函数&#xff0c;这种自定义的函数&#xff0c;就不会被记录到我们的…

易观分析:手机银行季度活跃用户突破7亿人,个人养老金业务争夺战开启

易观分析&#xff1a;近期&#xff0c;个人养老金制度正式启动实施&#xff0c;在全国36个先行城市或地区落地&#xff0c;首批可开办个人养老金业务的23家商业银行争抢养老蓝海市场&#xff0c;纷纷上线了个人养老金资金账户开户、缴存、产品代销费率优惠等激励活动。 由于个人…

JBoss漏洞 - CVE-2017-12149

文章目录漏洞简介影响范围靶场环境搭建漏洞发现漏洞利用攻击机检查JAVA环境下载利用反序列化工具 CVE-2015-7501进行漏洞测试Jboss Application Server反序列化命令执行漏洞 漏洞简介 JBOSSApplication Server 反序列化命令执行漏洞(CVE-2017-12149)&#xff0c;远程攻击者利用…

RTP协议--介绍

一、什么是RTP 数据传输协议RTP&#xff0c;用于实时传输数据。RTP报文由两部分组成&#xff1a;报头和有效载荷。 二、RTP的会话过程 当应用程序建立一个RTP会话时&#xff0c;应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成&#xff0c;有两个…