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 要谨慎,确认路径无误后再执行。
MySQLmacOSDatabase运维