# ============================================================================= # 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