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

9次阅读

mysql服务名需通过systemctl list-unit-files | grep -i mysql确认,常见为mysqld.service或mysql.service;启用自启用sudo systemctl enable 服务名;二进制部署需手动创建/etc/systemd/system/mysqld.service并执行daemon-reload;启用后须手动测试启动并查日志验证。

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

确认 MySQL 服务名是否为 mysqldmysql

不同发行版和安装方式(包管理器 vs 二进制部署)会导致服务名不同。RHEL/centos 8+ 和较新版本的 MySQL 官方包通常使用 mysqlddebian/ubuntu 默认可能用 mysql,但实际 systemd 单元文件名仍常为 mysqld.service

执行以下命令确认:

systemctl list-unit-files | grep -i mysql

常见输出包括:mysqld.servicemysql.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(否则可能找不到配置)
  • UserGroup 应与 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-networkingbind-address = 127.0.0.1,虽不影响自启,但会导致远程连不上——这不属于自启失败,但上线后第一反应常误判为“没起来”。

text=ZqhQzanResources