CentOS8关闭MySQL8服务的三种常用方法:停得稳、关得狠、删得净
CentOS8关闭MySQL8服务的三种常用方法

MySQL8在CentOS8上跑久了,内存飙高、端口被占、备份前要先停库,一句systemctl stop mysqld未必能一次到位。不同场景得用不同招:有人只想临时歇火,有人想永久断根,还有人干脆连数据目录都想清掉。下面把三种最常用、最不容易踩坑的关库姿势一次讲透,照着敲命令就行,回车之后世界瞬间安静。
方法一:systemctl一把梭——最干净利落的临时停库
CentOS8默认用systemd管服务,MySQL8安装完会生成mysqld.service单元文件。想让它立刻闭嘴,直接:
sudo systemctl stop mysqld
停完顺手看一眼状态:
sudo systemctl status mysqld

如果看到Active: inactive (dead),说明进程已死,端口3306随即释放。此时MySQL配置、数据文件纹丝不动,下次开机或手动start就能原地复活。适合深夜切库、临时调优、跑批前秒关的场景。
注意:stop指令会等待当前事务提交,大事务回滚可能拖几秒,别急着杀进程;若卡超过systemd-timeout,systemd才会强杀。
方法二:禁用自启动——让MySQL8永久闭嘴,重启也不冒头
服务器要改跑PostgreSQL,或者这台机器只想当静态文件节点,MySQL8就别再开机自启了。两条命令搞定:
sudo systemctl disable mysqld
sudo systemctl stop mysqld

先disable再stop,防止手滑只关当前会话,重启又自动带起。验证是否生效:
systemctl is-enabled mysqld
返回disabled即表示永久关闭。以后无论reboot还是systemctl restart,MySQL8都不会再自启动。需要重新启用时,enable加start即可。
坑点提示:如果之前用过chkconfig老命令,CentOS8里它已被systemd兼容层接管,结果一样,但建议统一用systemctl,省得后续排查绕晕。
方法三:卸载套餐——连包带数据一起端走,寸草不生
机器要转手、环境要归零,或者MySQL8版本回退到5.7,最省心的办法就是连rpm包一起卸。先停库,再删包,最后清数据,顺序不能反:
1. 停服务
sudo systemctl stop mysqld
2. 卸载软件包
CentOS8默认装的是mysql-community-server,直接:
sudo dnf remove mysql-community-server -y
依赖包如mysql-community-client、common、libs会一并摘掉。
3. 删除数据与配置
默认数据目录/var/lib/mysql,配置文件/etc/my.cnf、/etc/my.cnf.d/,一口气端掉:
sudo rm -rf /var/lib/mysql /etc/my.cnf /etc/my.cnf.d
日志若自定义过路径,记得一起删,避免后续重装报UUID冲突或权限错乱。
4. 清理残留用户(可选)
如果之前跑的是mysql系统用户,且确定不再用,可:
sudo userdel -r mysql
至此,MySQL8从磁盘到systemd痕迹全部抹平,rpm -qa | grep -i mysql空空如也,重装、换版本都不会被旧配置打扰。
常见翻车现场与急救
1. stop卡死:大事务回滚时间超长,systemctl stop默认90秒超时,可临时加--no-block或调大TimeoutStopSec,别直接pkill -9,否则下次启动要跑崩溃恢复。
2. 端口仍被占:停服务后lsof -i :3306还能看见进程,八成是mysqld_safe守护进程还在,先kill掉它,再重新stop。
3. disable失败:提示Failed to disable unit: Unit file is masked,说明单元被屏蔽,先systemctl unmask mysqld,再disable。
4. 卸载后重装报密码错:数据目录没清干净,新安装继承旧ibdata1,root密码还是旧的,记得彻底删/var/lib/mysql。
临时停就用systemctl stop,永久关就再加disable,连根拔就remove+rm -rf。三条命令记牢,CentOS8上MySQL8想怎么关就怎么关,再也不怕被端口占用半夜叫醒。

