不能直接用mysql.server脚本启动,因其为sysv init设计,不被rocky linux 9、ubuntu 22.04+等systemd系统原生识别;硬套用会报“unit mysqld.service not found”或静默失败。

为什么不能直接用 mysql.server 脚本启动
官方二进制包自带的 support-files/mysql.server 是为 SysV init 设计的 shell 脚本,在 Rocky Linux 9、Ubuntu 22.04+ 等现代发行版上已不被 systemd 原生识别。硬套用会报 Failed to start mysqld.service: Unit mysqld.service not found 或静默失败——因为 systemd 根本没加载它。
/etc/systemd/system/mysqld.service 必须手动写,不能复制粘贴旧配置
systemd 启动 MySQL 的核心是正确声明工作路径、用户权限和依赖关系。常见错误包括:
-
WorkingDirectory指向不存在的目录(如/var/lib/mysql),但你实际把datadir放在了/data/mysql,systemd 会因目录缺失直接退出,journalctl -u mysqld只显示failed with result 'protocol',毫无提示 - 漏写
User=mysql和Group=mysql,导致进程以 root 身份运行,违反最小权限原则,且可能触发 SELinux 拒绝(尤其在 Rocky Linux 9 上) - 没加
LimitNOFILE=65536,高并发连接时触发Too many open files
推荐最小可用配置(适配 basedir=/usr/local/mysql8, datadir=/usr/local/mysql8/data):
yuanfang-skills 的共享设计系统,提供 token CSS 变量、12+ 主题以及可复用的布局类型 HTML 块,供 yuanfang-html-image(以及 fu...)使用。
[Unit] Description=MySQL Server Documentation=man:mysqld(8) After=network.target Wants=network.target [Service] Type=simple User=mysql Group=mysql ExecStart=/usr/local/mysql8/bin/mysqld --defaults-file=/etc/my.cnf Restart=on-failure RestartSec=10 TimeoutSec=300 LimitNOFILE=65536 WorkingDirectory=/usr/local/mysql8/data [Install] WantedBy=multi-user.target
注册前必须检查三个前提条件
跳过任一检查,systemctl daemon-reload 后仍会启动失败:
-
chown -R mysql:mysql /usr/local/mysql8—— 不仅是datadir,整个安装目录都要属主正确,否则mysqld初始化时无法创建 pid 文件或 socket -
ls -l /etc/my.cnf确保配置文件存在且可被mysql用户读取;若用include引入子配置,路径也必须可访问 -
getenforce返回Enforcing时,需确认 SELinux 允许 mysqld 访问自定义路径:semanage fcontext -a -t mysqld_db_t "/usr/local/mysql8/data(/.*)?"+restorecon -Rv /usr/local/mysql8/data
启动失败后只看这三行日志
别翻完整日志,先聚焦关键线索:
-
journalctl -u mysqld -n 20 --no-pager | grep -E "(failed|denied|Permission|cannot)"—— 直接过滤权限/路径类错误 -
systemctl show mysqld | grep -E "(ActiveState|SubState|Result)"—— 判断是启动超时、协议错误还是配置解析失败 -
sudo -u mysql /usr/local/mysql8/bin/mysqld --defaults-file=/etc/my.cnf --validate-config—— 手动验证配置语法是否合法,避免sql_mode中拼错参数名等低级错误
最常被忽略的是 WorkingDirectory 和 SELinux 上下文的组合问题:目录存在、权限正确、配置无误,但 SELinux 没放行,systemd 就会卡在 “starting” 状态不动,连错误都不报。










