mysql在Linux系统中设置开机自启动的方法

来源:这里教程网 时间:2026-02-28 20:42:33 作者:

确认 MySQL 服务名是否为
mysqld
mysql

不同发行版和安装方式(包管理器 vs 二进制部署)会导致服务名不同。RHEL/CentOS 8+ 和较新版本的 MySQL 官方包通常使用

mysqld
;Debian/Ubuntu 默认可能用
mysql
,但实际 systemd 单元文件名仍常为
mysqld.service

执行以下命令确认:

systemctl list-unit-files | grep -i mysql

常见输出包括:

mysqld.service
mysql.service
,或自定义名如
mysqld@default.service
。务必以实际输出为准,后续操作全部基于这个服务名。

启用 systemd 开机自启(主流现代 Linux 发行版)

绝大多数当前使用的 Linux 发行版(CentOS 7+/RHEL 7+、Ubuntu 16.04+、Debian 8+)都使用 systemd。只要 MySQL 服务已正确注册为 systemd 单元,启用自启只需一条命令:

若服务名为
mysqld.service
:运行
sudo systemctl enable mysqld
若服务名为
mysql.service
:运行
sudo systemctl enable mysql
启用后可通过
sudo systemctl is-enabled mysqld
验证,返回
enabled
表示成功
该操作本质是创建符号链接到
/etc/systemd/system/multi-user.target.wants/
目录下,不修改原单元文件

手动配置 service 文件(仅限二进制部署或无默认单元文件)

如果你是直接解压 MySQL 二进制包(如

mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
)并手动启动,系统通常没有预置
.service
文件,必须自己写一个。

创建文件:

/etc/systemd/system/mysqld.service
,内容示例(请按实际路径和用户调整):

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target

关键点:

ExecStart
必须指向绝对路径的
mysqld
二进制,并指定
--defaults-file
(否则可能找不到配置)
User
Group
应与 MySQL 数据目录属主一致(常见为
mysql:mysql
写完后运行
sudo systemctl daemon-reload
,再执行
sudo systemctl enable mysqld

验证是否真能开机启动(别只信
enable
成功)

systemctl enable
只是注册启动项,不代表服务本身能正常启动。真正容易出问题的是启动时依赖、权限或配置错误。

重启前先手动测试:
sudo systemctl start mysqld
,再用
sudo systemctl status mysqld
查看是否 active (running)
如果失败,重点检查日志:
sudo journalctl -u mysqld -n 50 -e
,常见错误包括:
Can't open the mysql.plugin table
(数据目录未初始化)、
Permission denied
(目录权限不对)、
Address already in use
(端口被占)
不要跳过
sudo systemctl daemon-reload
(修改 service 文件后必须执行)
某些云服务器或容器环境可能禁用部分 systemd 功能,需确认 init 系统确实是 systemd:
ps -p 1 -o comm=
输出应为
systemd

最常被忽略的一点:MySQL 的

my.cnf
中若设置了
skip-networking
bind-address = 127.0.0.1
,虽不影响自启,但会导致远程连不上——这不属于自启失败,但上线后第一反应常误判为“没起来”。

相关推荐