使用 systemd 管理 MySQL 服务

文若7个月前技术文章273

前言

systemd 是 Linux 系统推出的初始化(init)系统,MySQL 使用 RPM 或者 Debian 包安装 MySQL 会默认使用 systemd 来管理 MySQL 服务,不需要额外配置,但是二进制安装还需要运维人员手动配置。

1. 安装 MySQL

1.1 下载安装包

从下方链接中,选择需要下载安装包的版本,下载 MySQL 二进制安装包。

https://downloads.mysql.com/archives/community/

1.2 下载自动化脚本

下方是我的 Github 地址,代码可以直接 Copy 下来:

https://github.com/COOH-791/mysql_lib/blob/main/MySQL_install.py

或者直接在服务器上 wget 下载:

wget https://github.com/COOH-791/mysql_lib/blob/main/MySQL_install.py

脚本可以指定:安装路径, 数据路径, 默认端口 三个重要的参数,如果有需要可以自行指定,也可以选择不指定,将会按照脚本的默认路径安装。

[root@172-16-104-57 mysql_opt]# python MySQL_install.py 
usage: MySQL_install.py [-h] [--path PATH] [--port PORT] [--datadir DATADIR]
                       [--basedir BASEDIR]

Random password: HOcZ9ldv$%mh

optional arguments:
 -h, --help            show this help message and exit
 --path PATH, -p PATH  MySQL binary installation package path.
 --port PORT           Install the port specified by MySQL, Default: 3306
 --datadir DATADIR     Data directory. Default to /data
 --basedir BASEDIR     Base directory. Default to /usr/local

-h: 输出 help -path & -p 就是 MySQL 安装包的路径(必须输入) -datadir & -d 就是 MySQL 数据路径 默认:/data -basedir & -b 就是 MySQL 安装路径 默认:/usr/local -port 就是 MySQL 的端口 默认:3306

1.3 安装 MySQL

python MySQL_install.py -p=mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz

使用屏幕上的命令进入 MySQL 修改 root 密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'YouPassword';

添加环境变量:

-- 如果安装目录不在 /usr/local/mysql 先建一个软连接 
-- ln -s /安装目录 /usr/local/mysql
export PATH=$PATH:/usr/local/mysql/bin/
echo 'PATH=$PATH:/usr/local/mysql/bin/' >> /etc/profile

这里简单介绍 MySQL_install 自动化部署脚本,详细的可参考:MySQL 自动化部署

2. 配置 systemd

本小节,介绍配置 systemd 的 MySQL 服务。

2.1 配置含义介绍

systemd 配置项主要包含 3 部分,其具体含义如下。

[unit]

  • Description:服务描述。

  • Documentation:服务文档。

  • After:依赖的服务,只有在依赖的服务启动后才能启动当前服务。

[Install]

  • WantedBy:设置依赖关系,multi-user.target 相当于 System V 中的 init 3,既多用户模式。

[Service]

  • User:指定服务运行用户。

  • Group:指定用户的属组。

  • Type:指定服务启动类型。可设置的值有 simple、exec、forking、oneshot、dbus、notify 和 idle,默认为 simple。

    • forking:服务进程在启动过程中会调用 fork() 创建子进程,当服务启动完毕后,父进程会退出,而子进程将作为服务主进程运行,这也是传统 unix 服务的经典作法。建议设置 PIDFile,以便 systemd 识别服务主进程。在 MySQL 5.7 中,只能将 Type 设置为 forking。

    • notify:服务启动成功后,会调用 sd_notify() 通知 systemd。systemd 在收到通知后,会继续启动后续服务。相当于 forking 该方式更加精准,但需要代码层面的支持。MySQL 8.0 版本原生支持 notify 类型。

  • TimeoutSec:超时时长,包括 TimeoutStartSec 和 TimeoutStopSec。

    • TimeoutStartSec:服务启动时间的超时时长。如果服务在指定时间内没有启动成功,systemd 会认为服务启动失败,此时会执行关闭操作。

    • TimeoutStopSec:服务关闭超时时长,当执行 STOP 操作时,systemd 会立刻发出 SIGTERM 信号来关闭服务进程。如果在指定时间内没有关闭成功,则会发出 SIGKILL 信息强行杀死服务进程。如果将 TimeoutSec 设置为 0,则会关闭超时检测。

  • ExecStart:服务的启动命令。mysqld 必须是绝对路径。

  • EnvironmentFile:环境变量文件。可在该文件中配置服务启动时的环境变量。

  • Restart:指在什么情况下需要重启服务进程。可设置为 no、always、on-success、on-failure、on-abormal、on-abort 和 on-watchdog,默认为 on 表示不重启服务。如果设置为 on-failure 则会在以下场景下重启服务:进程意外退出(返回码非 0),接收到终止信号(包括 core dump,不包括 SIGHUP、SIGINT、SIGTERM 和 SIGPIPE 这四种信号),操作超时,配置的 Watchdog 被触发。

  • RestartPreventExitStatus:如果程序的返回码或者接收信号在该参数中定义了,即使满足 Restart 中定义的条件,也不会触发重启。

  • Environment:设置环境变量。这里的 MYSQLD_PARENT_PID 指的是 mysqld 父进程的 PID。在 MySQL 8.0 中,支持通过 restart 命令重启 MySQL 实例。在执行 restart 命令时,该进程会用来启动 mysqld。PID 为 1 的进程是 init 进程。在 MySQL 5.7 中,因为不支持 restart 命令,所以不用设置该参数。

  • PrivateTmp:是否使用私有的 tmp 目录。

2.2 配置 systemd

vi /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/8.0/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
Type=notify
TimeoutSec=0
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS
# EnvironmentFile=/etc/sysconfig/mysql
LimitNOFILE=65535
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false

reload 配置文件:

systemctl daemon-reload

2.3 管理 MySQL 服务

启动 MySQL:

systemctl start mysqld

关闭 MySQL:

systemctl stop mysqld

重启 MySQL:

systemctl restart mysqld

设置开机自启:

systemctl enable mysqld


相关文章

MySQL优化器特性(七)成本估算常数

成本估算常数表示执行一些MySQL基础操作时的成本,如读取一个页面,创建一个临时表,比较一条记录,解析一行记录等操作。mysql.engine_cost和mysql.server_cost表分别记录存...

Linux下的IO统计工具:iostat,iotop

Linux下的IO统计工具:iostat,iotop

iostat      监视系统输入输出设备和CPU的使用情况。iostat命令 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmst...

Hive中小表与大表关联(join)的性能分析

经常看到一些Hive优化的建议中说当小表与大表做关联时,把小表写在前面,这样可以使Hive的关联速度更快,提到的原因都是说因为小表可以先放到内存中,然后大表的每条记录再去内存中检测,最终完成关联查询。...

证书过期问题之IPV6协议

证书过期问题之IPV6协议

1、首先了解情况:客户的SSL/TLS证书要过期了,所以进行了证书替换工作,但是替换之后,有一部分客户端还是提示证书已过期,如图所示:2、看这个报错是非常的清晰的,就是证书过期的问题,但是为什么同事没...

Hadoop3.2.4纠删码实操(三)

Hadoop3.2.4纠删码实操(三)

1、纠删码实操1.在HDFS中建立以下三个目录,并都设置为XOR-2-1-1024k策略。[root@hd2 hadoop]# hadoop fs -mkdir /ec_xor_s SLF4J: C...

mysql高可用配置(一)

一、简介MySQL使用双向半同步复制模式,通过开源的keepalived实现自动切换,应用通过vip连接数据库。配合自定义脚本,实现故障安全切换,切换过程对应用透明。二、部署主从2.1、在主备节点部署...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。