Mac 开发机清理实战:Homebrew、MySQL binlog 和用户目录残留怎么处理

5次阅读
没有评论

开发机用久以后,磁盘空间经常不是被一个明显的大文件吃掉,而是被几类东西慢慢堆起来:用户根目录里的旧缓存、迁移残留的 Intel Homebrew、本地数据库日志、以及一些已经不用的语言环境。

这篇记录一次 Mac 开发机清理思路。重点不是“看到大目录就删”,而是先分清哪些是缓存、哪些是运行环境、哪些是数据库数据,再决定怎么处理。

先看根目录,不要被系统目录吓到

macOS 根目录下常见这些目录:

/Applications
/Library
/System
/Users
/Volumes
/private
/usr
/opt
/tmp -> private/tmp
/var -> private/var

这些大多是系统正常结构。真正需要警惕的不是这些名字,而是是否出现了应用随手创建的陌生顶层目录,或者个人项目、压缩包、数据库文件被放到了用户根目录。

可以先做只读检查:

ls -la /
df -h /System/Volumes/Data

如果根目录没有异常,再转到用户目录和开发工具目录。

用户根目录:重点找旧项目、旧缓存和误装依赖

用户根目录最容易堆东西。常见残留包括:

  • 旧下载目录;
  • 旧日志;
  • Java crash log;
  • 误装在用户根目录的 node_modules
  • Gradle、pnpm、npm、Flutter、Python 等缓存;
  • 旧代理、旧输入法、旧开发工具配置。

可以先找大文件:

find "$HOME" -maxdepth 1 -type f -size +10M -print -exec ls -lh {} \;

再看几个常见缓存:

du -sh ~/.gradle ~/.npm ~/.pnpm-store ~/.pub-cache ~/.m2 2>/dev/null

如果明确不用 Gradle,可以删 ~/.gradle。如果仍然写 Java,但主力是 Maven,~/.m2 反而要谨慎一点,因为 Maven 依赖会放在那里。

如果发现用户根目录有 package.jsonpackage-lock.jsonnode_modules,要先看它是不是某个项目误装到了家目录。很多时候是因为在错误目录执行过 npm install

敏感文件先迁移,不要顺手删除

清理时遇到疑似密钥、钱包、账号、数据库导出、交易数据的文件,处理原则应该反过来:不是先删,而是先迁移到更明确的位置。

比如一个多年以前的 CSV,如果里面出现大量 64 位十六进制字段、地址、WIF 形态字段,就应该按敏感材料处理。即使它很旧,也不要当普通垃圾删。

更稳妥的做法是:

~/Documents/加密资产/

这类文件迁过去以后,再决定是否加密归档、离线备份或彻底销毁。

Homebrew 大,不一定是 Homebrew 本身大

Apple Silicon Mac 当前 Homebrew 通常在:

/opt/homebrew

Intel 时代残留常见在:

/usr/local

先确认当前 brew:

which brew
brew --prefix

再看大小:

du -sh /opt/homebrew/* 2>/dev/null | sort -h

如果看到 /opt/homebrew 很大,不要马上 brew cleanup 后以为万事大吉。很多时候真正的大头在:

/opt/homebrew/var

这里可能是 MySQL、PostgreSQL、Redis、Kafka、RabbitMQ 等本地服务的数据和日志。brew cleanup 清的是旧版本、缓存、断链,清不了数据库数据。

MySQL binlog 是常见空间黑洞

本地 MySQL 数据目录常见位置:

/opt/homebrew/var/mysql

如果里面有很多 binlog.000xxx,每个几百 MB 到 1GB,很快就会堆出几十 GB。

先看体积:

du -ch /opt/homebrew/var/mysql/binlog.* 2>/dev/null | tail -1
ls -lh /opt/homebrew/var/mysql/binlog.* | tail -20

在线清理优先用 MySQL 命令:

PURGE BINARY LOGS TO 'binlog.000753';

或者按时间清:

PURGE BINARY LOGS BEFORE '2026-06-12 00:00:00';

不要直接删文件。直接删会让 binlog.index 和实际文件不一致。只有在本地开发库、MySQL 已停止、确认没有复制和恢复需求时,才考虑离线处理,并且必须同步更新 binlog.index

给本地开发库设置 binlog 过期

清掉旧 binlog 只是一次性止血。更重要的是避免它继续无限增长。

Homebrew MySQL 配置一般在:

/opt/homebrew/etc/my.cnf

可以在 [mysqld] 下加:

# 本地开发库:binlog 最多保留 7 天,避免日志无限膨胀。
binlog_expire_logs_seconds = 604800

然后重启 MySQL:

brew services restart mysql

注意不要用 sudo brew services start mysql 启动 Homebrew MySQL。MySQL 会拒绝以 root 运行,还可能留下一个 root 的 LaunchDaemon 服务循环尝试启动。

服务状态用:

brew services list

看到类似下面这样才正常:

mysql started 用户名 ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

旧 /usr/local 要单独处理

Apple Silicon 机器上,如果当前 Homebrew 在 /opt/homebrew,但 /usr/local 还有旧 Homebrew 结构,那通常是 Intel 时代迁移残留。

可以先看:

du -sh /usr/local/* 2>/dev/null | sort -h

常见残留包括:

  • /usr/local/Homebrew
  • /usr/local/var
  • /usr/local/n
  • /usr/local/bin
  • /usr/local/lib
  • /usr/local/share

这里不要整锅端。/usr/local/bin 里可能还有 JetBrains、VirtualBox 或你自己写过的脚本入口。清理前最好列出命令,再决定是否备份或移动。

推荐的清理顺序

我的顺序是:

  1. 先看根目录,确认没有异常顶层目录。
  2. 清用户根目录里的旧日志、旧下载、误装依赖。
  3. 敏感文件先迁移保留,不随手删。
  4. 清纯缓存,比如 Gradle、pnpm、npm、Flutter。
  5. /opt/homebrew/var,确认是否数据库或服务日志。
  6. 对 MySQL binlog 用正规方式清理,并设置过期。
  7. 最后再处理旧 /usr/local

清理后要复扫

清理完不要只看 Finder 的可用空间。建议复扫:

df -h /System/Volumes/Data
du -sh /opt/homebrew /opt/homebrew/var/mysql /usr/local 2>/dev/null
brew services list

如果 MySQL、Redis、Nginx 等服务状态正常,binlog 没有继续暴涨,用户根目录没有大文件散落,这轮清理才算真正收口。

本地开发机清理最怕“爽删”。真正稳的做法,是先分类、再隔离、再删除;遇到数据库和密钥材料,宁可慢一点,也不要靠直觉动手。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-06-12发表,共计2915字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)