mysql卸载需先停服务、杀进程、purge所有包(含mysql-common)、删/var/lib/mysql与/etc/mysql等残留目录及socket文件、清除mysql用户组和环境变量,最终which mysqld、find mysql、systemctl grep mysql均无输出才算彻底干净。

确认 MySQL 服务已停止且无残留进程
没停服务就删文件,轻则报错,重则损坏系统状态。先确保 mysqld 真的不在跑了:
运行 sudo systemctl status mysql,如果显示 active (running),立刻执行 sudo systemctl stop mysql。
再补一刀查进程:ps aux | grep mysqld,只要输出里还有 mysqld 或 mysql 相关行,就得继续 kill 或检查是否被 mariadb 占用(Debian 12+ 默认可能预装 MariaDB,服务名是 mariadb)。
用 apt purge 彻底卸载所有 MySQL 包
apt remove 只删二进制,--purge 才清配置。但 Debian 的包命名容易漏,尤其 mysql-common 是关键枢纽,不删它,/etc/mysql/ 下的配置模板还会留着。
必须一次性执行:
sudo apt-get --purge remove mysql-server mysql-client mysql-common
接着清理依赖和缓存:
sudo apt-get autoremovesudo apt-get autoclean-
sudo apt-get remove dbconfig-mysql(这个包常被忽略,它会残留数据库配置元信息)
最后用 dpkg -l | grep mysql 确认输出为空——任何带 mysql 的行都意味着没清干净。
手动删除数据、配置与 socket 文件
包管理器不管 /var/lib/mysql 和 /etc/mysql,这两处是重装冲突的主因。但别急着 rm -rf,先验证路径是否真属于 MySQL:
查真实数据目录(如果还能连上):mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
查 socket 路径:mysql -u root -p -e "SHOW VARIABLES LIKE 'socket';"
常见残留位置包括:
-
/var/lib/mysql(默认数据目录) -
/etc/mysql(主配置目录) -
/etc/my.cnf(全局配置,可能单独存在) -
/tmp/mysql.sock、/var/run/mysqld/mysqld.sock(socket 文件,不删会导致新安装连不上) -
/usr/local/mysql(若曾源码编译安装过)
删之前建议先 ls -la 看一眼内容,避免误删其他服务共用的目录。
清理用户、组与环境变量
Debian 安装 MySQL 时会创建 mysql 用户和组,卸载后不会自动删除。残留用户会导致新安装权限拒绝或 mysqld 启动失败:
检查是否存在:id mysql
若返回用户信息,执行:sudo userdel mysql 和 sudo groupdel mysql
环境变量也常被遗忘:
检查 echo $PATH 是否含 /usr/local/mysql/bin 或类似路径
搜索并编辑:~/.bashrc、~/.zshrc、/etc/profile,删掉所有 export PATH=...mysql... 行
真正干净的标准不是“卸载完成”提示,而是三件事同时成立:运行 which mysqld 和 which mysql 都无输出;sudo find /usr /etc /var -name "*mysql*" 2>/dev/null 返回极少几行无关结果;sudo systemctl list-unit-files | grep mysql 完全空白。任何一项不满足,重装大概率失败。











