Mac 关闭 mysqld 进程与开机自启
本机装了 MySQL 之后它默认开机自启,常驻内存几百兆。如果只是偶尔本地联调用一下,平时让它一直跑着挺浪费。
麻烦的是直接 kill 掉进程没用——过几秒它又起来了,ps 一看 PID 变了。原因是 macOS 用 launchd 管理后台服务,MySQL 安装时注册了一个 daemon 并且带 KeepAlive 配置,进程一死 launchd 立刻把它拉起来。所以要真正停掉,得先让 launchd 别管它,再杀进程。
下面是完整步骤。
- 开启终端,输入:
ps aux | grep mysqld查看所有进程
先确认它在不在跑、以什么用户身份跑、PID 是多少。输出里会有一行是 grep mysqld 自己,忽略即可。用 pgrep mysqld 更干净,只输出 PID。
- 杀掉所有
mysqld进程
killall 按进程名杀,不用手抄 PID:
sudo killall -9 mysqld
这里要说一句:-9(SIGKILL)是强制终止,进程没有机会做任何清理。对数据库来说这不是好习惯——正在写的事务、还在内存里的脏页都可能丢,下次启动要做崩溃恢复,极端情况下损坏数据文件。
优雅的做法是先试不带 -9 的 sudo killall mysqld,默认发 SIGTERM,mysqld 收到后会刷盘、关闭连接、正常退出。或者直接用官方提供的停止脚本 sudo /usr/local/mysql/support-files/mysql.server stop。只有进程卡死不响应了才动用 -9。
- 再次查看
mysqld,如果mysqld换了PID,依然存在, 输入
PID 变了就是被 launchd 重新拉起来了,印证了前面说的机制。这时候要处理的是 launchd 的注册项:
sudo launchctl unload -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
这条命令的两个部分要分清:unload 是从 launchd 卸载这个服务(当前会话生效),-w 是把 plist 标记为 disabled 写进配置,这才是让它开机不再自启的关键。少了 -w 只能停到下次重启。
tip
你可以先输入 /Library/LaunchDaemons/ 查看你的 .plist 文件的文件位置
plist 的文件名跟安装方式有关,官方 dmg 包装的一般是 com.oracle.oss.mysql.mysqld.plist,用 Homebrew 装的则在 ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist。ls /Library/LaunchDaemons/ | grep -i mysql 能直接找出来。
恢复自启
想让它重新开机启动,把 unload -w 换成 load -w:
sudo launchctl load -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Homebrew 装的更简单
如果 MySQL 是通过 Homebrew 装的,压根不用碰 launchctl,brew services 已经把这些封装好了:
brew services stop mysql # 停止并取消自启
brew services start mysql # 启动并设为自启
brew services run mysql # 只启动这一次,不注册自启
brew services list # 看所有服务的状态
run 和 start 的区别很实用:只是临时要用数据库就 run,用完 stop,全程不会写自启配置。这是我现在的常用做法——需要时手动开,不需要时它完全不占资源。

还没有留言,来发表第一条吧~