Ubuntu通过apt安装MySQL后默认已启用开机自启,若未生效需先用sudo systemctl is-enabled mysql验证状态,服务名可能为mysql或mysqld;若服务未注册则须手动创建systemd unit文件并执行daemon-reload和enable。

Ubuntu 默认安装的 MySQL(通过 apt install mysql-server)已经启用开机自启,无需额外操作。如果你发现没自动启动,大概率是服务被禁用、启动失败,或你用的是非标准安装方式(如二进制/源码编译/Docker)。
确认 MySQL 是否已启用开机自启
直接运行命令验证:
sudo systemctl is-enabled mysql
返回 enabled 说明已配置;若返回 disabled 或报错 Unit mysql.service could not be found,则需进一步排查。
- 服务名不一定是
mysql:Ubuntu 22.04+ 默认用mysql,但旧版或手动编译安装可能用mysqld,可试sudo systemctl is-enabled mysqld -
is-enabled只看“是否注册为开机启动”,不代表一定能成功启动——得结合sudo systemctl status mysql看实际状态 - 如果返回
static,说明该服务被其他 unit 依赖触发(比如multi-user.target),通常也属于有效自启,不用干预
启用开机自启(当 is-enabled 返回 disabled 时)
执行启用命令即可:
sudo systemctl enable mysql
这条命令本质是创建符号链接:/etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service。
- 不需要加
--now参数——enable本身不启动服务,只注册自启;如需立即启动,另加sudo systemctl start mysql - 如果提示
Failed to enable unit: Unit file mysql.service does not exist,说明你装的不是官方包管理版本,比如是二进制解压版或 Docker 容器,不能直接用systemctl enable - 不要去改
/etc/rc.local:Ubuntu 20.04+ 默认不启用rc-local,强行启用反而容易因执行顺序问题导致 MySQL 启动失败
非 apt 安装(二进制/编译/Docker)如何实现自启
这类安装没有现成的 .service 文件,必须手动提供。核心是写一个 systemd unit 文件,指向你的 mysqld 二进制和配置。
- 假设你的 MySQL 安装在
/usr/local/mysql,配置文件为/etc/my.cnf,则新建/etc/systemd/system/mysqld.service,内容至少包含:[Unit]Description=MySQL ServerAfter=network.target[Service]Type=simpleUser=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnfRestart=on-failure[Install]WantedBy=multi-user.target - 写完后运行:
sudo systemctl daemon-reload && sudo systemctl enable mysqld - Docker 场景下,容器本身不参与系统级自启;应使用
docker run --restart=always,或用docker-compose.yml中设置restart: always
最容易被忽略的一点:MySQL 自启失败往往不是因为没启用,而是启动时卡住或崩溃——比如数据目录权限不对、my.cnf 里写了不存在的路径、端口被占用。务必先确保 sudo systemctl start mysql 能手动成功,再谈自启。


















