You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS下MySQL 5.7.20压缩包安装版服务脚本及启停方案咨询

解决方案:创建SysV风格的MySQL服务脚本

既然你是用压缩包安装的MySQL 5.7.20,没有自动生成init服务文件,我们可以手动创建一个符合CentOS SysV init标准的脚本,这样就能用service命令实现启动、停止、状态查询,同时系统关机时会自动触发停止动作,开机自启也能替代/etc/rc.local的方式(更规范)。

步骤1:创建服务脚本

用编辑器创建/etc/init.d/mysql文件:

vim /etc/init.d/mysql

粘贴以下脚本内容,请根据你的实际安装路径修改MYSQL_HOME、MYSQL_DATADIR、MYSQL_USER这几个变量:

#!/bin/bash
# chkconfig: 345 64 36
# description: MySQL database server
# processname: mysqld
# config: /usr/local/mysql/my.cnf

# 自定义变量,请根据你的实际情况修改
MYSQL_HOME="/usr/local/mysql"
MYSQL_DATADIR="/data/mysql"
MYSQL_USER="mysql"
MYSQL_SOCK="${MYSQL_DATADIR}/mysql.sock"
MYSQL_PID="${MYSQL_DATADIR}/mysqld.pid"

# 加载系统函数库
. /etc/rc.d/init.d/functions

start() {
    echo -n "Starting MySQL: "
    if [ -f ${MYSQL_PID} ]; then
        echo "MySQL is already running (PID: $(cat ${MYSQL_PID}))"
        return 0
    fi
    # 用mysqld_safe启动,后台运行
    su - ${MYSQL_USER} -c "${MYSQL_HOME}/bin/mysqld_safe --datadir=${MYSQL_DATADIR} --pid-file=${MYSQL_PID} &"
    # 等待3秒检查是否启动成功
    sleep 3
    if [ -f ${MYSQL_PID} ] && kill -0 $(cat ${MYSQL_PID}) 2>/dev/null; then
        success
        echo
    else
        failure
        echo
        return 1
    fi
}

stop() {
    echo -n "Stopping MySQL: "
    if [ ! -f ${MYSQL_PID} ]; then
        echo "MySQL is not running"
        return 0
    fi
    # 优雅停止MySQL
    ${MYSQL_HOME}/bin/mysqladmin -u root -S ${MYSQL_SOCK} shutdown
    # 等待进程退出
    sleep 3
    if ! kill -0 $(cat ${MYSQL_PID}) 2>/dev/null; then
        rm -f ${MYSQL_PID}
        success
        echo
    else
        failure
        echo
        return 1
    fi
}

status() {
    if [ -f ${MYSQL_PID} ] && kill -0 $(cat ${MYSQL_PID}) 2>/dev/null; then
        echo "MySQL is running (PID: $(cat ${MYSQL_PID}))"
        return 0
    else
        echo "MySQL is stopped"
        return 3
    fi
}

restart() {
    stop
    start
}

# 处理命令参数
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    restart)
        restart
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?

步骤2:配置脚本权限与开机自启

  1. 给脚本添加执行权限:
chmod +x /etc/init.d/mysql
  1. 将脚本添加到系统服务管理,并设置开机自启:
chkconfig --add mysql
chkconfig mysql on

步骤3:测试功能

现在你就可以用service命令操作MySQL了:

  • 启动:service mysql start
  • 停止:service mysql stop
  • 查询状态:service mysql status
  • 重启:service mysql restart

关于关机自动停止的说明

通过chkconfig配置后,系统会在关机/重启时自动调用脚本的stop动作,无需额外配置——这是SysV init服务的标准行为,它会根据runlevel的切换触发对应的服务启停。

可选:Systemd服务方案(CentOS 7+推荐)

如果你的CentOS版本是7或以上,更推荐用systemd unit文件(现在系统默认用systemd),创建/usr/lib/systemd/system/mysql.service:

[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --datadir=/data/mysql --pid-file=/data/mysql/mysqld.pid
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -S /data/mysql/mysql.sock shutdown
Restart=on-failure

[Install]
WantedBy=multi-user.target

然后执行以下命令生效:

systemctl daemon-reload
systemctl enable mysql.service

这样同样可以用service mysql start/stop/status(systemd兼容service命令),或者直接用systemctl命令操作,开机自启和关机自动停止也会自动处理。

注意事项

  1. 确保mysql用户存在:如果没有创建,执行useradd -r -s /sbin/nologin mysql
  2. 数据目录权限:chown -R mysql:mysql ${MYSQL_DATADIR}
  3. 如果mysqladmin需要密码,可以在/root/.my.cnf中配置(权限设为600):
[mysqladmin]
user=root
password=你的MySQLroot密码

内容的提问来源于stack exchange,提问作者Nawaz Sohail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 06:23:17