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:配置脚本权限与开机自启
- 给脚本添加执行权限:
chmod +x /etc/init.d/mysql
- 将脚本添加到系统服务管理,并设置开机自启:
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命令操作,开机自启和关机自动停止也会自动处理。
注意事项
- 确保
mysql用户存在:如果没有创建,执行useradd -r -s /sbin/nologin mysql - 数据目录权限:
chown -R mysql:mysql ${MYSQL_DATADIR} - 如果
mysqladmin需要密码,可以在/root/.my.cnf中配置(权限设为600):
[mysqladmin] user=root password=你的MySQLroot密码
内容的提问来源于stack exchange,提问作者Nawaz Sohail
相关产品推荐
相关产品推荐

