Files
xinfra/ansible/files/mysql-delivery@.service
T

54 lines
2.1 KiB
Desktop File
Raw Normal View History

# =============================================================================
# XINFRA MySQL 交付实例 Systemd 模板单元
# =============================================================================
# 这是 systemd 的模板单元(template unit),文件名中的 @ 是模板标识
# 使用方式:systemctl start mysql-delivery@{实例名}.service
# 例如:mysql-delivery@db01.service、mysql-delivery@db02.service
#
# %i 参数会被 systemd 自动替换为 @ 后面的实例名
# 这样同一台主机可以运行多个 MySQL 实例,彼此隔离
# =============================================================================
[Unit]
# 服务描述,%i 会被替换为实际实例名
Description=XINFRA MySQL delivery instance %i
# 依赖:等待网络在线后再启动(MySQL 需要绑定网络端口)
After=network-online.target
Wants=network-online.target
[Service]
# Type=notify:mysqld 启动完成后会通过 sd_notify 通知 systemd
# 比 Type=simple 更可靠,systemd 能准确知道服务何时真正就绪
Type=notify
# 以 mysql 用户/组身份运行(最小权限原则)
User=mysql
Group=mysql
# 创建运行时目录 /run/mysql-delivery-{实例名}/
# 用于存放 socket 和 pid 文件,放在 tmpfs(内存文件系统)上,重启自动清理
RuntimeDirectory=mysql-delivery-%i
RuntimeDirectoryMode=0755
# 启动命令:使用实例专属配置文件
# %i 被替换为实例名,指向 /etc/mysql/mysql-delivery/{实例名}.cnf
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/mysql/mysql-delivery/%i.cnf
# 故障自动重启:崩溃后 5 秒自动重启
Restart=on-failure
RestartSec=5s
# 启动超时:120 秒内未完成启动则判定为失败
TimeoutStartSec=120s
# 最大打开文件数:MySQL 需要大量文件描述符(连接、临时表等)
LimitNOFILE=65535
# OOM 评分调整:-200 表示被 OOM Killer 杀掉的优先级较低
# MySQL 是数据库服务,被误杀影响较大,尽量保护
OOMScoreAdjust=-200
[Install]
# 开机自启:加入 multi-user.target(多用户模式,即正常启动完成后)
WantedBy=multi-user.target