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