Windows下sc delete后服务残留,需先用sc queryex | findstr /i "mysql"查真实服务名(如MySQL80),再net stop该服务后sc delete;Linux需apt purge+autoremove+手动删/var/lib/mysql等目录;ProgramDataMySQL需takeown+icacls获取权限后rd删除;注册表仅删MySQL AB键及精确匹配的服务名项。
直接执行 sc delete MySQL 失败,往往是因为服务名不是字面的 “MySQL”。Windows 上 MySQL 服务名通常带版本后缀,比如 MySQL80、MySQL57 或 mysqld。不查准就删,会删错或删不掉。
正确做法是:以管理员身份打开 CMD,运行:
sc queryex | findstr "SERVICE_NAME",再逐行过滤含 mysql 的行;或者更直接:
sc queryex | findstr /i "mysql"。输出里 SERVICE_NAME: MySQL80 这一行才是你要用的真实服务名。
sc delete MySQL80
net stop MySQL80
sc delete 报“拒绝访问”,说明权限不足——必须用管理员 CMD,且不能是普通 PowerShell 窗口apt remove mysql-server 只卸载二进制,不会删配置和数据目录;apt purge 才真正清配置,但即便如此,/var/lib/mysql 和 /etc/mysql 仍可能留着——因为它们被标记为“配置文件”,apt 默认保留以防用户想复用。
所以完整清理链必须包含:
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
→ sudo apt autoremove(这步会连带删掉被依赖但已无主包的库)→ sudo rm -rf /var/lib/mysql /etc/mysql /var/log/mysql*
autoremove 不是可选步骤,它会清理 libmysqlclient21 等残留依赖,否则重装时可能冲突/var/log/mysql* 必须手动删,日志文件不归 apt 管理,但会影响新实例启动(尤其当旧错误日志触发 SELinux 拒绝时)yum remove 不等价于 purge,得搭配 yum clean all + 手动 rm -rf /var/lib/mysql
C:ProgramDataMySQL 是 Windows 下最顽固的残留点,不是“删不掉”,而是它同时受三重保护:系统隐藏属性、NTFS 权限继承、以及可能被 explorer.exe 或杀毒软件占用。
别用资源管理器右键删除。正确顺序是:
cd C:ProgramData
takeown /f MySQL /r /d y 获取所有权icacls MySQL /grant administrators:F /t 赋予完全控制权rd /s /q MySQL 强制递归删除如果仍提示“正在使用”,任务管理器里检查 mysqld.exe、mysql.exe、甚至 workbench.exe 是否真退出——它们可能后台挂着没关干净。
注册表不是垃圾桶,乱删 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices 下所有 MySQL 相关项,极可能破坏其他服务(比如 WAMP/XAMPP 共存时,删错项会让 Apache 启动失败)。
安全范围只有三个位置,其余一律不动:
HKEY_LOCAL_MACHINESOFTWAREMySQL AB(主厂商键,必删)HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMySQL AB(64 位系统下 32 位兼容键,存在才删)HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices 下名称精确匹配你查到的服务名(如 MySQL80),而非模糊搜 “mysql”删前务必导出备份:reg export "HKEY_LOCAL_MACHINESOFTWAREMySQL AB" mysql-ab-backup.reg。删完别重启,先验证 PATH 里没 MySQL 路径、命令行敲 mysql --version 报“不是内部命令”才算过关。