MySQL 5.7数据库安装部署手册 For Linux

1.概述

本手册描述了在LINUX(RHEL6或7)操作系统下以二进制编译包方式安装MySQL 5.7社区版数据库软件的操作过程。本手册中红色字体部分需根据实际使用情况更改,如无明确文字说明,均使用操作系统root用户执行命令。

1.1 文档目的

规范化及标准化MySQL的安装部署及运维操作,减少运维的复杂性。

1.2 适用范围

本手册适用于在Linux操作系统下使用MySQL二进制包进行安装部署。

2.MySQL 版本规范

2.1 版本选型

MySQL 5.7为目前线上环境的主流版本,当前MySQL8.0版本还未趋于稳定,目前暂不建议使用,推荐使用MySQL 5.7最新版(截止文档修改时为MySQL 5.7.26),由于MySQL版本迭代较快,可通过以下链接下载MySQL5.7最新版软件包及可关注release note获得最新版本信息:

l  最新版本下载地址:https://dev.mysql.com/downloads/mysql/5.7.html

l  归档版本下载地址:https://downloads.mysql.com/archives/community/

l  relaes note 地址:https://dev.mysql.com/doc/relnotes/mysql/5.7/en/

目前MySQL社区版不提供热补丁升级的方式,基于MySQL5.7的版本,均采用in-place方式进行软件包替换方式进行小版本升级。

3.操作系统软硬件规范

3.1 操作系统版本

当前RHEL或CentOS7系统为MySQL运行的主流操作系统平台,建议作为MySQL数据库的首选操作系统。操作系统小版本号不低于7.3。

3.2 硬件要求

l   建议使用x86_64架构的服务器

l   CPU:主频越高越好,核数根据业务量大小选择,建议不小于8核

l   内存:根据数据量及热点数据大小评估合适的内存大小,建议不小于16G

l   网卡:千兆、万兆均可

l   电源:冗余电源、冗余风扇

l   存储:SSD最佳,机械盘建议万转以上,建议做RAID 10,如果RAID卡支持BBU,可开启RADI卡的WriteBack功能

3.3 文件系统挂载

l   数据盘使用逻辑卷(LVM)方式管理,便于扩展

l   文件系统

n  redhat7/centos7 推荐使用 xfs

n  redhat6/centos6 推荐使用 ext4

l   磁盘调度算法

n  SAS设备使用 deadline

n  SSD设备使用 noop

l   挂载参数

defaults,noatime,nodiratime,nobarrier

修改磁盘调度算法:

[root@10-186-21-83 ~]# echo "deadline" > /sys/block/sdb/queue/scheduler

[root@10-186-21-83 ~]# vi /etc/rc.local

echo "deadline" > /sys/block/sdb/queue/scheduler

修改挂载参数:

[root@10-186-21-83 ~]# mount -oremount,noatime,nodiratime,nobarrier /dev/sdb /data

[root@10-186-21-83 ~]# vim /etc/fstab

/dev/sdb     /data  ext4     defaults,noatime,nodiratime,nobarrier  1 1

注意:/sys/block/sdb/queue/scheduler中的sdb值在各个环境存在差异,需要改为实际环境的磁盘标识。

3.4 配置swap权重

数据库服务器必须降低 swap 的使用权重

[root@10-186-19-87 ~]# vim /etc/sysctl.conf

vm.swappiness = 1

保存后使其生效

[root@10-186-19-87 ~]# sysctl -p

3.5 MySQL运行用户及用户组

建议使用mysql用户运行MySQL服务:

groupadd mysql

useradd -m mysql –g mysql

3.5 MySQL用户ulimit设置

操作系统对mysql用户注意以下参数的设置,该设置为必须的设置:

vi /etc/security/limits.d/mysql.conf

mysql soft nofile 65535

mysql hard nofile 65535

mysql soft nproc 65535

mysql hard nproc 65535

3.6 防火墙及selinux

服务器上的 iptables 应该是关闭的,否则规则可能对数据库服务造成影响,需要先确认影响面:

#关闭iptables

redhat6/centos6

[root@10-186-21-83 ~]# /etc/init.d/iptables stop

[root@10-186-21-83 ~]# chkconfig iptables off

redhat7/centos7

[root@10-186-21-83 ~]# systemctl stop firewalld.service

[root@10-186-21-83 ~]# systemctl disable firewalld.service

#关闭selinux

[root@10-186-21-83 ~]# setenforce 0

[root@10-186-21-83 ~]# cat /etc/selinux/config

SELINUX=disabled

SELINUXTYPE=targeted

3.7 关闭numa

服务器关闭numa会影响所有进程,关闭numa主要是解决MySQL 服务器swap严重以及内存泄漏的问题。需要注意的是 MySQL5.7.9 引入了innodb_numa_interleave 参数,MySQL自己解决了内存分类策略的问题,前提是服务器支持numa。也就是说如果使用MySQL5.7.9之后的版本,可以不用关闭服务器的numa。

1. 修改 grub.conf

l   RHEL/CentOS 6:

在 /boot/grub/grub.conf 文件中修改 kernel 行(添加numa=off):

# vi /boot/grub/grub.conf

kernel /vmlinuz-2.6.39-400.215.10.EL ro root=/dev/VolGroup00/LogVol00 numa=off

l   For RHEL 7

i. 在/etc/default/grub 文件中修改 kernel 行:

# vi /etc/default/grub

GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel_vm-210/root rd.lvm.lv=rhel_vm-210/swap vconsole.font=latarcyrheb-sun16 crashkernel=auto  vconsole.keymap=us rhgb quiet numa=off

ii. RHEL7/CentOS7 必须要重建 GRUB 配置文件才能生效:

# grub2-mkconfig -o /etc/grub2.cfg

2. 重启操作系统

# reboot

3.8 卸载旧版本rpm包

某些服务器上预装了 MySQL,但是版本是5.1,避免客户端版本差异带来的影响,应该卸载这类rpm包

[root@10-186-21-83 ~]# rpm -qa|grep mysql -i

[root@10-186-21-83 ~]# rpm -e --nodeps mysql-xxx-5.1..x86_64

[root@10-186-21-83 ~]# mv /etc/my.cnf /etc/my.cnf.`date +%Y%m%d`

3.9 配置sar性能数据采集

sar是一个优秀的性能监视工具,最重要的sar功能是创建数据文件,为系统管理员提供历史性能信息。通过如下方式配置cron收集sar数据。

数据文件存放在/var/log/sa目录下,需要注意文件大小及磁盘空间。

#安装

yum install -y sysstat

  

#修改配置,注意数据保留天数

vim /etc/sysconfig/sysstat

  

#启动sysstat,设置开机启动

  

#修改cron

vim /etc/cron.d/sysstat

*/1 * * * * root /usr/lib64/sa/sa1 1 1         #默认是10分钟收集一次,粒度太粗,建议修改为1分钟一次

53 23 * * * root /usr/lib64/sa/sa2 -A          #生成当天的性能数据,无需修改

3.10 配置history

让 history 记录更多历史操作记录,并记录时间戳和执行用户

vi /etc/bashrc 在末尾添加:

export HISTFILESIZE=500000000

export HISTSIZE=1000000

export PROMPT_COMMAND="history -a"

export HISTTIMEFORMAT='%F %T '

export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S  `whoami`  "

  

使配置生效:

source /etc/bashrc

4. 实例配置

4.1 目录规范

如果条件允许,推荐数据目录与日志目录使用不同的磁盘,减少IO争用。/data目录与/log目录分别挂在不同的存储设备,多实例使用相同父目录以端口号作为每个实例的子目录,目录规范如下:

basedir = /data/mysql_base

datadir = /data/mysql_data/3333

log_bin = /log/mysql/binlog/3333/mysql-bin

relay_log = /log/mysql/relaylog/3333/mysql-relay

innodb_log_group_home_dir = /log/mysql/redolog/3333

临时目录必须单独指定,不能使用操作系统的临时目录:

tmpdir = /data/mysql_tmp

4.2 MySQL配置参数

下面列出重要参数,以及需要视环境灵活调整的参数,完整查看《my.cnf.5.7_for_general》

(注意:标红参数需要根据环境修改 my.cnf.5.7_for_general模板)

通用设置:

参数名

说明

port

端口号,同一服务器上不能重复。安全考虑,建议不使用默认3306。

tmpdir

临时目录路径。避免某些情况导致/tmp 目录满,应该单独指定一个路径。

basedir

MySQL 安装目录

datadir

数据目录

innodb_temp_data_file_path

共享临时表空间,非压缩临时表存放位置。设置默认值会在数据目录下创建一个 ibtmp1 文件,可无限扩展,临时表删除时空间可重复使用,总空间只能在重启mysqld时释放。遇到垃圾SQL可能导致磁盘空间耗尽,建议限制最大值,比如:ibtmp1:12M:autoextend:max:20G,当垃圾SQL需要的临时表超过限制会执行报错。

character_set_server

数据存储字符集,建议使用utf8mb4,是utf8的超集。每字符最大4字节,支持生僻字和emoji表情。

collation_server

字符校验规则,utf8mb4_bin将区分字符大小写。与字符集一样后期修改麻烦,确认后再设置。

lower_case_table_names

表名强制转换成小写,建议设置为1。

transaction_isolation

定义事务隔离级别,建议设置READ-COMMITTED,即已提交读,可以满足绝大多数业务要求。如果有需求,可修改为RR级别。

连接与cache:

参数名

说明

max_connections

允许的最大连接数,实际上会额外留一个连接给具有super权限的用户。默认值151,建议调大,根据业务连接MySQL的数量进行设置。

wait_timeout

mysqld等待客户端响应的超时时间,如果超过时间,客户端一直没有新的请求,mysqld会主动断开这个连接。业务端如果连接池配置有问题,是被动断开连接的,下次新的请求被分配到这个被断开的连接时,会报错。一般的,应该大于应用连接池空闲连接检查时间。

interactive_timeout

与 wait_timeout 作用相似,保持一致。

max_connect_errors

当某个服务器到mysqld的连接被中断(网络,或者程序意外中断)等,会增加 connect_errors的计数值,当超过了阈值这个服务器的连接请求会被mysqld blocked。需要注意的是密码错误造成的连接失败不会被计数,默认值为 100,需要调大。

query_cache_type

查询缓存开关,建议关闭:在表的结构或数据发生改变时,查询缓存中的数据会失效;经常做 cache 失效操作,开销大。未来版本会被废弃。

query_cache_size

查询缓存大小

sort_buffer_size

每个会话的排序缓存大小,MySQL 有两种排序算法:全字段排序、rowid 排序,受 max_length_for_sort_data 值影响。

全字段排序即会将查询要返回的所有字段数据都放入 sort buffer 中进行排序,好处是数据排序完就可以完成查询,“坏处”是会消耗更多的内存,如果 sort_buffer_size 太小放不下需要排序的数据,则会在进行磁盘临时表排序,效率会大幅降低。

rowid 排序即只将需要排序的字段以及主键字段的数据放入 sort buffer 中进行排序,排序完成后再回表取得查询要返回的所有字段值。与全字段排序相比多了一次回表,效率较低。当参与排序的单行长度太大,超过 max_length_for_sort_data(默认1024 byte),MySQL采用 rowid 排序算法。

MySQL的优化思路是:如果内存够,就要多利用内存,尽量减少磁盘访问,所以默认算法是全字段排序。

请注意 sort_buffer_size 超过一定阈值会导致内存分配算法的改变,从而造成 system CPU 获取内存时间成倍增长,MySQL 性能成倍降低。官方给的阈值为:256K、2M,实测在物理机上超过32M阈值,oltp性能下降10倍。因此模板中设定值为:2M,这个参数的调整需要结合业务实际 SQL 情况,注意不要轻易调大。

InnoDB 相关:

参数名

说明

innodb_flush_log_at_trx_commit

redo log刷盘策略,必须为1:

0:每秒一次将 log buffer 写入 log file 并刷盘,crash 时,丢失1秒内的事务。性能最好,安全性最差。

1:每次事务提交都写 log file并刷盘,保证数据不丢失。性能最差,安全性最高。

2:每次事务提交都写 log file(操作系统缓存),但是每秒刷盘一次,mysqld crash并不会丢失事务,只有服务器操作系统崩溃或断电会丢失1秒内的事务。

innodb_buffer_pool_size

INNODB的缓冲池大小,根据硬件配置以及数据量大小设置,一般设置为总内存大小的80%

innodb_buffer_pool_instances

INNODB缓冲池被分成的实例数量,可以提高缓存数据使用的并发性,减少不同线程页读写页面的竞争。每个缓存池有它单独的空闲列表、刷新列表、LRU列表等等。根据缓冲池大小设置,一般可以设置每个缓冲池4G或8G。

innodb_io_capacity

InnoDB后台任务每秒执行的I/O操作次数的上限,例如从缓冲池刷脏页和合并change buffer。对于这个参数值的设置依据比较复杂:

1. 对于I/O 密集型的业务系统,可以设置大一点提升性能;

2. 通常根据存储的I/O能力来设置(IOPS),性能越好,可以设置的更高。经验值:万转机械盘raid10设置1000,SSD设置2000-6000,单块机械盘就使用默认值200。

如果要精确设置,需要进行压力测试找出合理值。

innodb_max_dirty_pages_pct

缓冲池脏页比例到达设定值,进行刷脏操作,主要是为了控制脏页数量保证有空闲页可供使用。设置太小会导致刷脏过于频繁,建议值:60

innodb_flush_method

innodb 数据刷盘策略,O_DIRECT模式下,数据文件的写入操作是直接从mysql innodb buffer到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,避免innodb和OS的双重缓冲。redo log 使用操作系统 cache。

innodb_flush_neighbors

指定从InnoDB缓冲池刷新数据页是否也刷新相同范围内的其他脏页。默认值为1,即刷临近数据页,主要是节省I/O。如果使用SSD,可以将此参数设置为0,因为SSD的I/O性能好,刷新临近数据页反而可能会降低性能。

innodb_log_file_size

redo log大小,对于性能的影响主要体现在 checkpoint 上,太小的logfile size的表现情况就是 checkpoint 比较频繁,导致刷新脏页到磁盘的次数增加,性能变差。redo log 是循环使用的,当重做日志不够用时,需要强制刷脏。如果已刷盘的 redo log LSN 与已刷盘的数据脏页 LSN之差 大于 重做日志总大小的一定百分比,则需要刷新足够的脏页回磁盘。

理论上 redo log 越大,数据库性能越好,但是过大的 redo log 会导致 crash recovery 时间很长。一般我们都将其设置为2-4GB,2个 redo log。

innodb_log_files_in_group

redo log数量,一般设置为2即可

innodb_online_alter_log_max_size

online DDL期间,DDL 表的数据更改操作会记录到一个临时日志中,默认大小是128M,建议设置为1G,避免过小导致DDL失败。

innodb_autoinc_lock_mode

自增锁模式,简单来说:

默认值1,批量插入(不确定行数)时会有表级的自增锁,能保证 statement-based replication 的安全性,并发的批量插入性能会差些;

建议值2,批量插入(不确定行数)时不再有表级自增锁,即并发批量插入性能提升,但是需要row-based replication 才能保证复制安全。

binlog格式规范是 row 格式,建议设置为2。如果 binlog_format 非 row,必须使用默认值1。

innodb_undo_tablespaces

设置独立undo log表空间数量,将undo log从ibdata1中分离到独立的表空间,防止undo log过大导致ibdata1过大(ibdata1无法释放空间)。建议设置为3,大于1时才能使用空间自动回收机制,只有在初始化时设置才有效。

innodb_undo_log_truncate

启用后,将超过innodb_max_undo_log_size定义大小的undo log表空间标记为删除。

innodb_max_undo_log_size

设置undo log表空间的最大值。

日志相关:

参数名

说明

binlog_format

binlog 格式,row格式保证复制安全

sync_binlog

binlog 刷盘策略,必须为1:

0:binlog 的刷盘交由操作系统控制。性能最好,安全性最差。

1:每次 sync_binlog commit groups 后都将 binlog 刷盘。性能最差,安全性最高。

n(n>1):每 n 次 sync_binlog commit groups 后将 binlog 刷盘。兼顾性能和安全,有丢失事务的风险。

binlog_error_action

控制当服务器遇到错误时发生的情况,例如无法写入,刷新或同步二进制日志,这可能导致主服务器的二进制日志变得不一致,进而影响从库复制错误。

在MySQL 5.7.7及更高版本中,此变量默认为ABORT_SERVER,当服务器在遇到二进制日志写入错误时会暂停日志记录并关闭mysqld。

master_info_repository

记录复制通道主库信息,以及slave io thread 读取主库binlog position。设置为FILE则将信息保存在文件中,有丢失风险,设置为TABLE则将信息保存在InnoDB 表中,通过InnoDB机制保证不丢失,必须设置为TABLE。

relay_log_info_repository

记录复制通道slave sql thread信息,主要是已经回放relay-log位点信息。设置为FILE则将信息保存在文件中,有丢失风险,设置为TABLE则将信息保存在InnoDB 表中,通过InnoDB机制保证不丢失。

回放位点如果丢失或者错误,会导致复制错误、主从数据不一致,必须为TABLE。

relay_log_recovery

启动复制时自动恢复relay-log,恢复过程会创建新的relay-log,删除旧的未回放的relay-log,并将slave io thread位点初始化为 slave sql thread已经回放relay-log的位点,重新获取binlog。是保证主从数据一致的重要参数,必须设置为1。

slow_query_log

慢查询日志,方便后续抓取慢查询SQL进行优化,建议开启。

long_query_time

定义sql执行时间的阈值,超过这个阈值,则记录到慢查询日志。模板中为5s,如果有需求请进行调整。

复制:

参数名

说明

rpl_semi_sync_master_enabled

主库半同步复制开关,设置后,重启复制生效(只有从库也开启半同步才有效)。

rpl_semi_sync_slave_enabled

从库半同步复制开关,设置后,重启复制生效(只有主库也开启半同步才有效)。在默认开启半同步复制的架构中,也建议设置为0,因为如果在从库slave io thread延迟很大的情况下开启半同步,主库会长时间等待从库返回ACK,导致主库无法写入数据。应该在确认从库延迟很小的情况下动态开启从库的半同步复制。

rpl_semi_sync_master_timeout

主库等待从库返回ACK的超时时间,如果超过这个时间还没收到从库ACK,则降级为异步复制。此参数设置需要考虑RPO与RTO:

如果RTO要求高,则尽量设置小,尽快降级而不让业务阻塞;

如果RPO要求高,且RPO是依靠半同步复制保障,则尽量设置大些,不允许MySQL通过自己的超时机制降级。这点需要与外部高可用软件配合,什么情况下可降级,或者人工判断。

rpl_semi_sync_master_wait_for_slave_count

主库等待从库返回ACK的数量,达到设定值主库事务才能提交。一般来说只需要保证1个从库的binlog与主库实时同步即可,设置为1。具体设置随高可用架构设计来修改。

rpl_semi_sync_master_wait_no_slave

在任意超时时间内,当主库的从库数量少于rpl_semi_sync_master_wait_for_slave_count参数指定数量时,如果rpl_semi_sync_master_wait_no_slave=OFF,半同步会立刻降级为异步;如果rpl_semi_sync_master_wait_no_slave=ON,半同步要等超时时间才会降级为异步。

slave-parallel-type

并行复制模式,需要设置为LOGICAL_CLOCK才能使用基于组提交的并行复制,才能真正提升从库复制的性能,减小延迟。

slave_parallel_workers

复制工作线程的数量,建议值16,如果业务写主库的并发度大,可以调大。

slave_preserve_commit_order

从库并行回放时,开启此参数,保证提交顺序与relay log中事务顺序相同。

slave_rows_search_algorithms

在row-based replication中,这个参数控制从库如何搜索匹配的数据行。默认设置时,当表上无主键,对于在该表上做的DML,则每一个行记录前镜像在备库都可能产生一次全表扫描。

推荐设置:INDEX_SCAN,HASH_SCAN,对于在一个ROWS EVENT中的所有前镜像收集起来,然后在一次扫描全表时,判断HASH中的每一条记录进行更新,可以部分解决无主键表导致的复制延迟问题。

(注意:HASH_SCAN在同一行数据同时更新多次时,会导致无法找到行记录,如果无法接受请使用默认值)

其他:

参数名

说明

validate-password

指定密码策略插件的加载方式,设置为FORCE_PLUS_PERMANENT,告诉mysqld在启动时加载插件并防止在服务器运行时删除它。

validate_password_policy

密码策略类型,可设置0,1,2或者LOW, MEDIUM, STRONG。分别代表不同的强度要求,一般设置为MEDIUM:Length,numeric,lowercase/uppercase,and special characters

performance-schema-instrument

performance_schema的额外设置,建议开启元数据锁监控和内存消耗监控,方便后续运维过程中排查问题。

innodb_numa_interleave

启用NUMA交错内存分配策略来分配InnoDB缓冲池,在支持NUMA 的操作系统上才可以启用生效。

5. 安装MySQL

MySQL安装有三种方式,分别为编译安装、rpm安装、二进制包安装,其实也是代表了三种介质。当下载源码包时需要进行编译,编译安装比较麻烦,还需要处理编译时可能发生的错误,耗时长;下载rpm包时使用rpm方式安装,但是不便于多实例安装;下载二进制包,只需要配置my.cnf 并进行初始化即可完成安装,是最方便最容易制定规范的安装方式。本文步骤就是二进制包安装方式。

安装前的准备工作:下载二进制安装包、解压安装包。

下载:

下载地址在2.1章节中有,在页面选择版本和操作系统(Linux-Generic)后会出现安装包列表,选择类似“Linux - Generic (glibc 2.12) (x86, 64-bit), Compressed TAR Archive”的即可。

解压:

使用tar zxf 命令解压,并将解压后的目录重命名为 basedir:

# tar zxf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

# mv mysql-5.7.25-linux-glibc2.12-x86_64 /data/mysql_base

5.1 创建MySQL运行用户

给mysqld进程单独分配一个运行用户,规范用户为:mysql

groupadd mysql

useradd -m mysql –g mysql

5.2 创建相关目录

如果对于目录规范有参考4.1章节,初始化时只会自动创建datadir的最后一层目录,即只会自动创建 /data/mysql_data/ 目录下的 3333 目录。所以初始化前需要创建好对应的目录并修改owner:

mkdir -p /data/mysql_data/3333

mkdir -p /log/mysql/binlog/3333

mkdir -p /log/mysql/relaylog/3333

mkdir -p /log/mysql/redolog/3333

mkdir -p /data/mysql_tmp

chown  mysql.mysql  /data/mysql_data/3333

chown  mysql.mysql  /log/mysql/binlog/3333

chown  mysql.mysql  /log/mysql/relaylog/3333

chown  mysql.mysql  /log/mysql/redolog/3333

chown  mysql.mysql  /data/mysql_tmp

5.3 修改my.cnf

在basedir下编辑 my.cnf,将my.cnf.5.7_for_general 模板内容贴进 my.cnf,并按照4.2章节说明修改部分参数。

5.4 初始化

# /data/mysql_base/bin/mysqld --defaults-file=/data/mysql_base/my.cnf --initialize --user=mysql

5.5 修改root密码

MySQL5.7初始化使用“—initialize”参数会自动为'root'@'localhost'设置一个随机密码,并标记为过期。必须先从mysql-error.log中找到随机初始密码,登录后修改root密码,否则不允许做任何操作:

i.先启动mysqld

# /data/mysql_base/bin/mysqld_safe --defaults-file=/data/mysql_base/my.cnf &

ii.登录mysqld修改root密码

mysql> alter user 'root'@'localhost' identified by '1qaz@WSX';

6. MySQL 服务管理配置

6.1 设置环境变量

为了方便以后使用MySQL相关程序,可以将basedir设置到环境变量,避免每次都输入完整的MySQL basedir路径。

i.在 /etc/profile 文件中添加:

# vim /etc/profile

export MYSQL_HOME=/data/mysql_base/bin

export PATH=$MYSQL_HOME:$PATH

ii.重载/etc/profile使修改生效:

# source /etc/profile

6.2 配置systemd

在5.5章节我们使用mysqld_safe启动了mysqld服务,这样的方式不是特别方便,尤其是关闭mysqld时,需要使用mysqladmin shutdown 这样的命令。所以在RHEL/CentOS 7上我们使用systemd来管理mysqld服务。

i. 在 /etc/systemd/system 目录下创建MySQL的systemd配置文件mysql_3333.service

(注意标红的地方需要根据实际情况修改)

# vim /etc/systemd/system/mysqld_3333.service

[Unit]

Description=MySQL Server

Documentation=man:mysqld(8)

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target

[Install]

WantedBy=multi-user.target

[Service]

User=mysql

Group=mysql

# 启动结束后会发出通知信号,systemd 接下来可以启动其他服务,在容器中可能需要设置为forking(启动一个子进程,并且启动后父进程会退出)

#Type=notify

Type=forking

PIDFile=/data/mysql_data/3333/mysqld.pid

# Disable service start and stop timeout logic of systemd for mysqld service.

TimeoutSec=0

# Start main service

ExecStart=/data/mysql_base/bin/mysqld --defaults-file=/data/mysql_base/my.cnf --daemonize $MYSQLD_OPTS –user=mysql

# Use this to switch malloc implementation

EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit

LimitNOFILE = 65535

# 守护,意外的停止会被重启

Restart=on-failure

#设置安全退出码,不会被自动重启

RestartPreventExitStatus=1

# Set environment variable MYSQLD_PARENT_PID. This is required for restart.

Environment=MYSQLD_PARENT_PID=1

# 设置私有的 tmpdir,建议设置为 false 关闭默认

PrivateTmp=false

ii. 设置开机自启动

# systemctl enable mysql_3333.service

iii. 启停mysqld

# systemctl start mysql_3307

# systemctl stop mysql_3333

iv. 查看 mysqld 状态

# systemctl status mysql_3333

如果需要修改systemd配置文件,修改完需要重载配置:

# systemctl daemon-reload mysql_3333

原文地址:https://www.cnblogs.com/DJRemix/p/14238552.html