6.2.5 启动与服务管理(systemd、开机自启)

本节讲解 MySQL 在 Linux 上使用 systemd 进行启动、停止、重启与开机自启的规范流程,并提供命令示例、排错思路与练习。

原理草图:systemd 管理 MySQL 服务流程

文章图片

1. 启动、停止与重启(含命令解释)#

启动服务

# 启动 MySQL 服务(单位名通常为 mysqld 或 mysql)
sudo systemctl start mysqld

# 解释:
# systemctl start <service>:请求 systemd 立即启动服务

停止服务

# 正常停止,确保数据刷盘
sudo systemctl stop mysqld

# 解释:
# systemctl stop <service>:让服务进行优雅退出,避免直接 kill

重启服务

# 修改配置后重启
sudo systemctl restart mysqld

# 解释:
# restart 会先 stop 再 start,确保配置生效

仅重新加载配置(若支持)

# 若服务支持 reload
sudo systemctl reload mysqld

# 解释:
# reload 仅重载配置,保持连接不断(需 mysqld 支持)

2. 服务状态与日志定位(含命令解释)#

查看运行状态

sudo systemctl status mysqld

# 关注字段:
# Active: active (running) 表示正常
# Loaded: unit 文件加载状态
# Main PID: 主进程 PID

查看 systemd 日志

# 最近 100 行日志
sudo journalctl -u mysqld -n 100 --no-pager

# 实时跟随日志
sudo journalctl -u mysqld -f

查看 MySQL 错误日志

# 根据 my.cnf 中 log_error 配置路径查看
sudo tail -n 100 /var/log/mysqld.log

3. 开机自启与验证(含命令解释)#

设置开机自启

sudo systemctl enable mysqld

# 解释:
# enable 会在系统启动时拉起该服务

取消开机自启

sudo systemctl disable mysqld

验证自启状态

systemctl is-enabled mysqld
# 预期输出:enabled 或 disabled

验证服务监听端口

# 默认端口 3306
ss -lntp | grep 3306

4. 常见问题与排错示例(含明确命令)#

问题1:启动失败,提示权限不足

# 检查数据目录权限
ls -ld /var/lib/mysql
# 修复权限
sudo chown -R mysql:mysql /var/lib/mysql

问题2:端口被占用

# 查找占用 3306 的进程
sudo ss -lntp | grep 3306
# 或
sudo lsof -i :3306

问题3:配置文件错误

# 校验配置(仅显示解析错误)
mysqld --defaults-file=/etc/my.cnf --validate-config

问题4:服务单元不存在

# 列出所有包含 mysql 的服务单元
systemctl list-unit-files | grep -i mysql

问题5:SELinux 阻止启动

# 临时查看 SELinux 状态
getenforce
# 临时调整(不建议长期)
sudo setenforce 0
# 长期调整请根据安全规范处理

5. 服务单元文件示例(理解 systemd 如何启动)#

# /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

说明:
- ExecStart 指定 mysqld 启动路径和配置文件
- User/Group 确保以 mysql 用户运行

6. 练习(含预期效果)#

练习1:模拟配置变更并重启

# 1) 备份配置
sudo cp /etc/my.cnf /etc/my.cnf.bak

# 2) 修改端口(示例)
sudo sed -i 's/^port=.*/port=3307/' /etc/my.cnf

# 3) 重启服务
sudo systemctl restart mysqld

# 4) 验证端口
ss -lntp | grep 3307
# 预期:看到 mysqld 监听 3307

练习2:查看启动失败日志

# 1) 故意写入无效配置
echo "invalid_config=1" | sudo tee -a /etc/my.cnf

# 2) 重启服务
sudo systemctl restart mysqld

# 3) 查看日志
sudo journalctl -u mysqld -n 50 --no-pager
# 预期:日志中出现配置项错误提示

练习3:验证开机自启

# 1) 启用自启
sudo systemctl enable mysqld

# 2) 重启系统后验证
systemctl is-enabled mysqld
systemctl status mysqld
# 预期:enabled + active (running)

7. 运维建议(落地操作)#

  • 变更配置前先备份:
sudo cp /etc/my.cnf /etc/my.cnf.$(date +%F)
  • 重启前先验证配置:
mysqld --defaults-file=/etc/my.cnf --validate-config
  • 记录操作日志(示例):
echo "$(date) restart mysqld by $(whoami)" | sudo tee -a /var/log/mysql-ops.log