确认服务名再执行 enable,别硬套 mysqld
MySQL 在不同发行版和服务安装方式下,systemd 服务名可能为
mysqld或
mysql,硬写
systemctl enable mysqld很容易报错 “No such file or directory”。先运行:
systemctl list-unit-files | grep -i mysql
看输出里实际注册的是哪个名字。Ubuntu/Debian 官方包常用
mysql,RHEL/CentOS 8+ 及 MySQL 官方 RPM 包多用
mysqld。如果没输出,说明服务文件根本没安装或路径不对——这种情况常见于手动解压 tar 包部署,得自己写 service 文件。
手动安装 MySQL 时必须自建 systemd 服务文件
用官方二进制包(如
mysql-8.0.xx-linux-glibc2.12-x86_64.tar.xz)部署时,
/etc/systemd/system/下默认没有
mysqld.service。不配这个,
systemctl enable就是空转。需创建:
sudo nano /etc/systemd/system/mysqld.service
填入内容时重点核对三项:
•
ExecStart必须指向你实际的
mysqld可执行路径(如
/usr/local/mysql/bin/mysqld)
•
User和
Group设为
mysql(确保该用户存在且有权限读写
datadir)
•
PIDFile要和配置文件
my.cnf中的
pid-file值一致
写完必须执行:
sudo systemctl daemon-reload,否则
enable会找不到服务单元。
启用后不重启,也能验证是否真生效
很多人等 reboot 才敢信,其实不用。启用后立即检查:
systemctl is-enabled mysqld→ 应返回
enabled
systemctl is-active mysqld→ 应返回
active(说明已启动)
更关键的是模拟开机流程:执行
sudo systemctl daemon-reload && sudo systemctl restart mysqld,观察是否报错。常见失败点:
•
datadir权限不对(
chown -R mysql:mysql /usr/local/mysql/data)
•
my.cnf中
socket或
port被占用
• SELinux 启用时未放行(
sudo setsebool -P mysqld_disable_trans 1临时绕过)
macOS 和 Windows 的“自动启动”本质不同
macOS 上用
brew services start mysql是让 launchd 管理进程,但默认只对当前用户生效;若要系统级开机自启(如服务器场景),得把 plist 拷到
/Library/LaunchDaemons/并用
sudo launchctl load -w加载,否则重启后普通用户登录才启动。
Windows 则依赖服务机制:
mysqld --install成功后,必须进
services.msc把 MySQL 服务的“启动类型”设为“自动”,光装不设等于白干。另外,
--install前务必确认
my.ini存在且路径正确,否则服务会启动失败,日志里只显示“服务未及时响应控制请求”这种模糊错误。
