macOS 上彻底卸载 MySQL 的完整指南
macOS 上彻底卸载 MySQL 的完整指南
1. 背景
最近项目从 MySQL 迁移到了 PostgreSQL,本地不再需要 MySQL 服务。MySQL 是通过官方 DMG 安装包安装的(路径 /usr/local/mysql),并非 Homebrew 安装。本文记录了完整的手动卸载过程。
注意:本文适用于通过 官方 DMG/pkg 安装 的 MySQL。如果是通过 Homebrew 安装的,卸载方式完全不同(
brew uninstall mysql)。
2. 卸载步骤
2.1 确认安装方式
在开始之前,先确认 MySQL 是如何安装的:
which mysql
# /usr/local/mysql/bin/mysql
mysql --version
# mysql Ver 8.4.7 for macos15 on arm64 (MySQL Community Server - GPL)
# 检查是否为 Homebrew 安装
brew list mysql 2>/dev/null && echo "Homebrew 安装" || echo "非 Homebrew 安装"
如果 mysql 命令位于 /usr/local/mysql/bin/mysql 而非 /opt/homebrew/bin/mysql,则可以判定为 DMG 安装。
2.2 停止 MySQL 服务
# 方式一:使用 MySQL 自带的管理脚本
sudo /usr/local/mysql/support-files/mysql.server stop
# 方式二:强制杀掉所有 mysqld 进程
sudo killall mysqld
# 方式三:卸载 LaunchDaemon(如果有)
sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
2.3 删除 MySQL 安装目录
sudo rm -rf /usr/local/mysql
这是 MySQL 的核心安装目录,包含了所有二进制文件、库、文档等。删除后 mysql 命令将不再可用。
2.4 删除 LaunchDaemon 启动项
sudo rm -f /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
如果 MySQL 配置为开机自启,系统会通过这个 plist 文件在启动时自动运行 mysqld。不删除的话,系统启动时还会报错。
2.5 删除系统偏好设置面板
sudo rm -rf /Library/PreferencePanes/MySQL.prefPane
DMG 安装的 MySQL 会在系统偏好设置中注册一个管理面板,用于启停服务。这个面板虽然是 GUI 工具,但留着也没用。
2.6 删除安装收据
sudo rm -rf /private/var/db/receipts/com.mysql.*
macOS 的 pkg 安装器会记录安装收据(.bom 和 .plist 文件),用于记录安装了哪些文件。删除后可防止系统包管理中残留旧记录。
2.7 删除配置文件
# 全局配置
sudo rm -f /etc/my.cnf
sudo rm -rf /etc/mysql/
# 用户配置
rm -f ~/.my.cnf
MySQL 的配置文件可能存在于多个位置。/etc/my.cnf 是最常见的全局配置,~/.my.cnf 是用户级别的配置。如果这些文件指向了已删除的 MySQL 路径,一些工具可能会报错。
2.8 清理临时文件
sudo rm -rf /tmp/mysql*
sudo rm -rf /var/tmp/mysql*
MySQL 运行时会创建临时文件,通常位于系统临时目录。清理它们可以释放少量磁盘空间。
2.9 验证卸载结果
which mysql
# mysql not found
# 检查是否还有残留
ls /usr/local/mysql 2>/dev/null || echo "/usr/local/mysql 已删除"
ls /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist 2>/dev/null || echo "plist 已删除"
ls /Library/PreferencePanes/MySQL.prefPane 2>/dev/null || echo "prefPane 已删除"
3. 一键卸载命令
将以上所有步骤合并为一个命令,方便以后复用:
# ⚠️ 警告:以下命令会彻底删除 MySQL 及相关文件,请先确认数据已备份!
sudo /usr/local/mysql/support-files/mysql.server stop 2>/dev/null
sudo killall mysqld 2>/dev/null
sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist 2>/dev/null
sudo rm -rf /usr/local/mysql
sudo rm -rf /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/MySQL.prefPane
sudo rm -rf /private/var/db/receipts/com.mysql.*
sudo rm -f /etc/my.cnf /etc/mysql/my.cnf
rm -f ~/.my.cnf
sudo rm -rf /tmp/mysql* /var/tmp/mysql* 2>/dev/null
echo "✅ MySQL 已彻底卸载"
4. 补充说明
Homebrew 安装的 MySQL
如果你是通过 Homebrew 安装的,只需一行命令即可:
brew uninstall mysql
brew cleanup
但注意 Homebrew 安装的 MySQL 也可能在 /usr/local/var/mysql 或 /opt/homebrew/var/mysql 保留数据目录,需手动删除:
rm -rf /opt/homebrew/var/mysql # Apple Silicon
rm -rf /usr/local/var/mysql # Intel
Docker 安装的 MySQL
如果你是通过 Docker 使用的 MySQL:
docker stop mysql-container
docker rm mysql-container
docker volume rm mysql-data
关于数据备份
在卸载之前,请确保已经备份了所有重要数据!
如果需要备份数据库:
mysqldump -u root -p --all-databases > mysql_backup_$(date +%Y%m%d).sql
5. 经验总结
- 确认安装方式是卸载的第一步。DMG、Homebrew、Docker 三种方式各有不同的卸载路径,混淆使用会导致清理不彻底。
- LaunchDaemon 是常见的残留源。即使删除了
/usr/local/mysql,如果 plist 还在,系统启动时仍会尝试启动mysqld,导致日志报错。 - 配置文件可能被忽略。
/etc/my.cnf的存在本身没有危害,但如果后续安装了其他 MySQL 变体(如 MariaDB),旧配置可能造成干扰。 sudo rm -rf要谨慎,确认路径无误后再执行。