Mac 安装 MySQL:Homebrew、DMG、容器化三条路径与配置避坑
2026/9/18 5:55:25 网站建设 项目流程

1. 装 MySQL 之前,先想清楚你要的是哪种"装法"

很多人搜索 MAC MySQL 安装,第一反应是找一个 DMG 双击到底。但在 Mac 上装 MySQL,路径其实有三条,选错了后面会多花一两个小时收拾。我自己的习惯是先判断使用场景:是本地开发调试、是搭一个小型测试库、还是要在 CI 里跑集成测试。场景不同,装法完全不一样。

先说结论性的判断逻辑,细节后面再展开。如果你平时写代码、用 IDE 连数据库、偶尔手动敲几条 SQL,那 Homebrew 是最省心的;如果你需要图形化管理、想要一个系统偏好设置里能点点就启停的面板,官方 DMG 包更直观;如果你只是临时验证一段 SQL 逻辑、或者不想让 MySQL 常驻占内存,容器化是最干净的。

1.1 三种安装路径的取舍:Homebrew、官方 DMG、容器化

Homebrew 路线的核心优势在于"一切皆命令行",升级、卸载、切版本都是一行命令。它把 MySQL 装成 Mac 上普通的一个软件包,二进制文件、数据目录、配置文件的位置都遵循 Homebrew 的约定,路径统一好记。缺点是初次接触的人会困惑于"装完了为什么 mysql 命令找不到",这其实是环境变量的问题,不是安装失败。

官方 DMG 路线是 Oracle 提供的一套图形安装向导,双击、下一步、勾选组件,最后弹出一个临时 root 密码。它的好处是组件齐全,MySQL Workbench、Shell、Router 可以一起装;坏处是卸载相当麻烦,而且不同版本之间升级要重新走一遍向导,数据目录还得自己备份。

容器化就简单粗暴了,拉镜像、映射端口、挂载数据卷,一分钟能跑起来。但 Mac 上的容器本质是跑在一个轻量虚拟机里,性能和文件 IO 跟原生安装有差距,而且停止容器后如果没挂卷,数据就没了。适合验证性使用,不适合当主力开发库。

安装方式适合人群升级便利度卸载干净度内存占用
Homebrew开发者日常使用高,一条命令高,两条命令
官方 DMG需要图形工具链低,重走向导低,需手动清中高
容器化临时验证、CI中,换镜像高,删容器可控

1.2 关于版本号:为什么我更倾向 8.0 而不是直接上最新

MySQL 的版本节奏这几年快了不少,8.0、8.4、9.x 都能在官网下到。新手最容易犯的错是"哪个最新装哪个",结果遇到驱动不兼容、语法变化、客户端工具连不上。我的建议是:除非你有明确的理由,否则先落在 8.0 这条线上。

原因很实在。第一,8.0 是目前生态兼容性最好的版本,各种语言的驱动、ORM 框架、可视化工具对它支持都成熟。第二,网上能搜到的教程、报错解决方案绝大多数都是围绕 8.0 写的,你踩的坑别人基本踩过。第三,8.4 开始一些参数默认值有调整,比如认证插件的策略,老项目迁过来可能会莫名其妙连不上。

Homebrew 里可以通过指定版本号来装,比如brew install mysql@8.0,这样装完是 8.0 系列,二进制目录会带版本后缀。如果直接brew install mysql,装到的是当前 formula 指向的最新稳定版。这一点在下命令之前就要想清楚,因为换版本往往意味着要重新初始化数据目录。

1.3 Apple Silicon 与 Intel 芯片的差异点

这一条是 Mac 上特有的坑,也是我觉得最容易被忽略的。Apple Silicon(M 系列)和 Intel 芯片的 Homebrew 安装前缀不一样,前者是/opt/homebrew,后者是/usr/local。这意味着:

  • 安装后的二进制路径不同,配置 PATH 时要写对;
  • 配置文件和数据目录的默认位置不同;
  • 如果你从 Intel 机器迁到 M 系列机器,之前写的脚本里的绝对路径全会失效。

查看自己的芯片架构,终端里执行uname -m,返回arm64就是 Apple Silicon,返回x86_64就是 Intel。这个命令看着简单,但我见过不止一个人因为不知道自己机器是哪种架构,照着别人的教程一步步抄,最后卡在环境变量上找不到原因。

还有一个隐藏问题:如果你在 M 系列 Mac 上通过 Rosetta 装了一个 x86 版本的 Homebrew,同时又装了原生版本,就会出现两套/opt/homebrew/usr/local并存的局面,which brew指向哪个取决于当前 shell 的环境。这种情况排查起来很费时间,所以一开始就要确认清楚自己用的是哪一套。

2. 系统层面的准备工作:这些前置项不做,后面全是坑

跳过准备工作直接上安装命令,是新手最常见的操作顺序。我当年也是这么干的,结果在一个晚上反复重装了三次。准备工作其实只有三四件事,花不了十分钟,但能省掉后面大量猜测。

2.1 先确认系统版本、终端类型和架构

打开终端,依次确认几个信息。系统版本在"关于本机"里能看到,也可以用sw_vers命令。终端类型要看当前用的是哪个 shell,macOS 从 Catalina 开始默认是 zsh,老系统或者手动改过的是 bash。这个区别直接决定了你要改的是~/.zshrc还是~/.bash_profile,改错了文件,环境变量怎么都不生效。

echo $SHELL可以看出来。返回/bin/zsh就改~/.zshrc,返回/bin/bash就改~/.bash_profile~/.bashrc。这里有个细节:macOS 上的 bash 启动时默认不读~/.bashrc,只读~/.bash_profile,所以如果你把 PATH 写在~/.bashrc里,新开终端是不生效的。这一点坑过太多人。

再确认一下架构,uname -m。三个信息确认完,你才知道后面所有路径该往哪写。我习惯在开始动手前把这三个值记在便签上,配置的时候直接对着写,不靠记忆。

2.2 Homebrew 的环境准备与网络状况处理

Homebrew 本身是一个包管理器,它的安装脚本会从远端拉取一堆东西。这一步卡住的人非常多,常见表现是脚本跑着跑着超时、或者卡在某个 git clone 上不动。这跟你的网络到远端的链路质量有关系,不是脚本本身有问题。

处理思路有两个方向。一是耐心重试,网络波动是常有的事,同一个命令多跑几次可能就过了。二是配置镜像源,把 Homebrew 的 formula 仓库和一些二进制分发的地址指向国内的镜像服务。配置镜像主要改两个地方:git 远程仓库地址,以及环境变量里的HOMEBREW_BOTTLE_DOMAIN。改完之后安装和后续的brew install速度会有明显改善。

需要提醒的是,镜像源是第三方维护的,同步有延迟,偶尔会出现某个包在镜像上还没有、导致安装失败的情况。遇到这种,临时把环境变量去掉、走默认源装一次,装完再恢复即可。别把镜像当成唯一选择,它只是加速手段。

安装脚本执行完之后,终端会提示你把它加入 PATH。这一步一定要做,而且要按照提示的那行命令原样执行,因为它会往你的 shell 配置文件里追加内容。执行完source一下配置文件,或者干脆关掉终端重开,然后brew --version验证。能打印出版本号,说明 Homebrew 本身没问题了。

2.3 顺手装几个后面会用到的小工具

这一步不是必须,但能显著降低后面踩坑的概率。我一般会顺手确认wget或者curl可用,用来下载安装包和测试端口;确认lsof可用(macOS 自带),用来查端口占用;如果打算用图形客户端,还会提前装好对应工具。

另外建议熟悉三条命令:brew services list看服务状态、lsof -i :3306看端口、ps aux | grep mysql看进程。这三条基本能覆盖 MySQL 起不来时的初步判断,比盲目重装高效得多。

3. Homebrew 路线:从 brew install 到首次登录的完整过程

准备工作做完,进入正题。这一节我把 Homebrew 安装 MySQL 的每一步都拆开讲,包括命令执行后你实际会看到什么、哪些输出是正常的、哪些需要干预。

3.1 安装命令与过程中的实际输出

执行brew install mysql。这条命令会做几件事:下载 MySQL 的预编译包(bottle)、解压到 Cellar 目录、在/opt/homebrew/opt/mysql/usr/local/opt/mysql建立软链接、装好依赖项比如 openssl、protobuf 等。

过程中终端会滚动一堆下载进度和依赖安装日志,这是正常的。如果卡在某个依赖上很久,多半是网络问题,Ctrl+C 中断后重新执行即可,Homebrew 会从断点继续,不会重复下载已经完成的部分。

装完之后,Homebrew 通常会给出一段 caveats 提示,内容大意是"我们为你创建了一个无密码的 root 用户"以及一些启动建议。这段提示很关键,很多人装完直接关了终端,然后回头发现不知道 root 密码是什么。默认情况下,Homebrew 装的 MySQL 的 root 账号是空密码,直接回车就能登录。这跟官方 DMG 包给你一个临时随机密码的行为完全不同。

如果你想装指定的 8.0 版本,命令改成brew install mysql@8.0。装完之后二进制路径会带版本号,比如/opt/homebrew/opt/mysql@8.0/bin,配置 PATH 的时候要注意这个区别。而且brew services start mysql在指定版本的情况下,服务名也可能是mysql@8.0

3.2 启动服务与初始密码的处理

安装完不等于服务在跑。Homebrew 默认不会自动启动它,需要手动执行brew services start mysql。这个命令会把 MySQL 注册成一个用户级服务,开机自动拉起。如果你不想开机自启,只想临时跑一下,可以用mysql.server start手动启动,用完mysql.server stop

服务起来之后,用brew services list检查状态,看到started就说明成功了。这时候尝试登录:

mysql -u root

如果直接进去了,说明 root 是空密码。为了安全,第一件事是改密码。在 MySQL 提示符下执行:

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES;

改完之后退出重登,这次需要mysql -u root -p然后输入密码。这两条命令我建议任何时候都敲一遍,即使是本地开发库,空密码的 root 也是个隐患,尤其是当你后面可能把服务暴露到局域网的时候。

如果你更希望用向导式的方式做安全初始化,可以执行mysql_secure_installation。它会依次问你:是否设置密码验证策略、是否修改 root 密码、是否移除匿名用户、是否禁止 root 远程登录、是否删除测试库。这几项在开发环境下建议这么选:密码策略选中等或低(本地用不必太严),移除匿名用户选是,禁止 root 远程登录选是,删除测试库选是。

3.3 让 mysql 命令全局可用:PATH 配置的三种写法

装完之后如果直接敲mysql提示command not found,不要慌,这不是装失败。Homebrew 把二进制装在了/opt/homebrew/opt/mysql/bin,这个目录默认不在 PATH 里。

三种写法,各有适用场景。第一种,直接在 shell 配置文件里追加一行:

echo 'export PATH="/opt/homebrew/opt/mysql/bin:$PATH"' >> ~/.zshrc source ~/.zshrc

注意引号里的路径要根据你的架构改,Intel 机器要写成/usr/local/opt/mysql/bin。第二种,如果你装的是带版本号的包,路径里加上版本,比如mysql@8.0/bin。第三种,把 bin 目录软链接到已经在 PATH 里的目录,比如ln -s /opt/homebrew/opt/mysql/bin/mysql /opt/homebrew/bin/mysql,这种写法适合你不想改环境变量、又想让命令可用的情况。

我个人推荐第一种,清晰可控,卸载的时候把那一行删掉就干净了。改完之后一定要新开一个终端窗口验证,别在当前窗口用,因为环境变量的加载时机问题可能让你以为没生效。

4. 官方 DMG 安装包路线:图形化向导里的每一个选择

如果你不习惯命令行,或者需要 MySQL Workbench 这类图形工具一起装,官方 DMG 包是更直观的选择。但图形向导里的选择项不少,选错了后期调整很麻烦。

4.1 下载与安装类型的选择

去官网下载页面找到 macOS 版本,注意选择跟你芯片架构匹配的包。Apple Silicon 要选 ARM 版本,Intel 选 x86 版本。下载下来是一个 DMG 文件,双击挂载后会看到若干 pkg 安装包。

安装类型界面会让你选:Developer Default、Server only、Client only、Full、Custom。这里的选择决定了装哪些组件。Developer Default 会装 MySQL Server 加一堆开发工具,包括 Workbench、Shell、文档等,适合大多数人。Server only 只装服务端,体积小、干净,适合你已经有别的客户端工具的情况。Custom 可以自己勾选组件。

我的建议是:如果这是你唯一一台开发机、打算长期用,选 Developer Default 一步到位;如果你已经有自己习惯的客户端,选 Server only,避免装一堆用不上的东西。Full 我没用过,它会装上所有东西,包括一些你可能永远打不开的组件,占空间。

4.2 安装向导中容易点错的几个界面

第一个坑在配置类型界面,会问你用"Standalone MySQL Server"还是"InnoDB Cluster"。单机开发毫无疑问选第一个。选错了后面配置会绕一大圈。

第二个坑在认证方式界面,会给你两个选项:强密码加密和传统认证方式。默认是强密码加密,也就是caching_sha2_password插件。如果你用的客户端工具版本比较老、或者某些语言的驱动没及时更新,用这个认证方式可能会报"Authentication plugin cannot be loaded"之类的错。遇到这种,要么升级客户端,要么在安装时选传统认证,或者在装完之后把用户改成传统认证插件:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

第三个坑是 root 密码设置界面。设完之后向导会弹一个对话框,显示临时密码。这个密码一定要立刻记下来,因为它只显示一次,关掉就找不回来了。如果没记,后面只能通过跳过权限验证的方式重置,过程比较折腾。

第四个坑是 Windows Service 那一页(在 Mac 上对应的是启动方式和面板选项),你可以选择是否开机自启、是否在系统偏好设置里放一个管理面板。建议两个都勾上,后面启停和查看状态会方便很多。

4.3 系统偏好设置里的 MySQL 面板怎么用

DMG 方式装完之后,系统偏好设置(新系统叫系统设置)底部会多出一个 MySQL 图标。点开能看到当前运行状态,以及几个按钮:Start、Stop、Initialize Database、Uninstall。

这个面板最大的价值是"卸载"按钮,它会帮你把服务停止并清理大部分文件,比手动删目录靠谱。Initialize Database 是用来重新初始化数据目录的,慎用,它会清空现有数据。注意这个面板在较新的 macOS 上可能因为权限或兼容性问题显示不正常,如果点开是空白或者按钮点不动,说明版本兼容有问题,这时候老老实实用命令行操作吧。

另外,DMG 装的服务跟 Homebrew 装的服务是两套体系,不能混用启停命令。如果你两个都装了,brew services管不动 DMG 那套,mysql.server也管不动 Homebrew 那套,而且它们都想占 3306 端口,必然冲突。所以一台机器上只保留一种安装方式,这是基本原则。

5. 装完只是开始:连接、字符集与配置文件的落地调整

到这一步 MySQL 能跑了,但默认配置离"好用"还有距离。字符集、时区、大小写敏感这几个参数,如果不提前设定好,后面会出现中文乱码、时间对不上、表名查询报错等一堆问题。

5.1 my.cnf 放在哪、写什么

MySQL 启动时会按固定顺序去几个位置找配置文件,找到第一个就用。macOS 上常见的位置有/etc/my.cnf/usr/local/mysql/etc/my.cnf、以及用户目录下的~/.my.cnf。不同安装方式默认的位置不一样,最稳妥的办法是登录后用SHOW VARIABLES LIKE 'datadir';找到数据目录,配置文件一般就在同级或上一级。

先看看当前用的是哪个配置文件:mysql --help | grep my.cnf,输出里第一个存在的路径就是生效的。如果这些路径都不存在,那就自己建一个/etc/my.cnf,这个是全局生效的位置。

一个典型的开发环境配置大概长这样:

[mysqld] default_authentication_plugin = mysql_native_password character-set-server = utf8mb4 collation-server = utf8mb4_0900_ai_ci default-time-zone = '+08:00' max_connections = 200 innodb_buffer_pool_size = 512M [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4

innodb_buffer_pool_size这个值取决于你机器内存,开发机给 512M 到 1G 比较合适。给太大会挤占系统内存,给太小又会导致频繁读盘。改完配置必须重启服务才生效。

5.2 utf8mb4 这件事必须一次做对

MySQL 里的 utf8 是个历史遗留问题,它的 utf8 实际只支持三个字节的字符,存不了 emoji 和部分生僻汉字。要完整支持 Unicode,必须用utf8mb4。这四个字我建议你在任何涉及中文的场景下都默认写全。

麻烦的地方在于,这个参数有三个层级:服务端、数据库、连接。只改服务端不够,建库的时候没指定字符集,库还是跟着旧的默认值走。所以建库语句要写全:

CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_0900_ai_ci;

连接层由客户端负责。JDBC 连接串要带characterEncoding=utf8useUnicode=true,Python 的 PyMySQL 建连接时指定charset='utf8mb4'。如果连接层没设对,会出现存进去是问号、或者读出来是乱码的情况,而且这种问题排查起来很迷惑,因为库里看着是好的。

验证方法很简单,建个表插一条带 emoji 的记录,能正常存取就说明链路通了。别等到线上出问题才回来查字符集。

5.3 时区与大小写敏感参数的影响

时区问题在本地开发时容易忽略,但一旦涉及时间字段的存储和查询就会暴露。MySQL 默认的time_zoneSYSTEM,跟随系统时区。如果你在 Mac 上设置的时区和数据库期望的不一致,存进去的时间会差几个小时。

在配置文件里写死default-time-zone = '+08:00'是最省事的做法,不依赖系统设置。改完重启,用SELECT NOW();跟你本地时间对比一下,一致就对了。

大小写敏感这个参数叫lower_case_table_names,macOS 上的默认值通常是 2,意思是表名按创建时的大小写存储,但比较时不区分。这个默认值在 Mac 上是合理的,因为 macOS 的文件系统本身就不区分大小写。但如果你打算把本地库导到 Linux 服务器上,两边这个参数不一致会导致表名对不上——创建的是UserTable,在 Linux 上查询usertable就报错。

尤其要提醒一点:这个参数在数据目录初始化之后就不能再改了,改完启动会直接报错。想统一大小写策略,只能在初始化之前设定好,或者重新初始化数据目录。所以如果你有跨平台部署的需求,一开始就要把它规划进去。

6. 客户端连接实测:命令行、Workbench、以及代码里的连接串

数据库装好、配置调完,接下来得验证"能不能连上、能不能用"。这一节我按三种不同的连接方式走一遍,每种都有各自的坑点。

6.1 命令行登录与常见认证方式报错

最基础的验证就是命令行。mysql -u root -p,输密码,能进到mysql>提示符就算成功。进去之后先看几个东西:SELECT VERSION();确认版本、SHOW DATABASES;看库、SELECT @@character_set_server;看服务端字符集。这三个值对上了,说明基础配置没问题。

如果报Access denied for user 'root'@'localhost',密码错了或者用户名不对。如果报Can't connect to local MySQL server through socket '/tmp/mysql.sock',说明服务没起来,或者 socket 文件路径不对。socket 路径可以在配置文件里指定,也可以在连接时用-S参数指定实际路径。用mysqladmin -u root -p status可以看到当前连接的 socket 位置。

还有一类报错是关于认证插件的,前面提过,特征是提示插件无法加载。解决办法就是前面那条ALTER USER ... IDENTIFIED WITH mysql_native_password

6.2 MySQL Workbench 的安装与建连接

Workbench 是官方免费的图形客户端,DMG 方式装 MySQL 时会一起装上,也可以单独下载。第一次打开会让你建一个连接,需要填几个东西:连接名随便起、主机名127.0.0.1、端口3306、用户名root、密码点 Store in Keychain 保存。

这里有个细节:主机名填localhost和填127.0.0.1在底层走的是不同通道。localhost走 Unix socket,127.0.0.1走 TCP。Workbench 里如果填localhost连不上,换成127.0.0.1试试,反过来也一样。这个区别在排查连接问题时很有用,能帮你快速判断是 socket 的问题还是网络层的问题。

连上之后 Workbench 的界面分成几个区:左侧是 Schema 列表,中间是 SQL 编辑器,下面是结果集和输出。日常用最多的就是写查询、看表结构、导数据。导数据这个功能挺好用,可以把查询结果直接导出成 CSV 或 JSON,也可以把一个库的结构和数据导出成 SQL 文件做备份。

6.3 用代码连一次,验证端口与权限

命令行和图形工具都通了,不代表你的应用能连上。因为应用连接可能走的是不同的用户、不同的认证方式、甚至不同的网络路径。我习惯在用代码访问之前,先用代码真实地连一次。

Python 的话,装个 PyMySQL 或者 mysql-connector-python,然后写最短的验证脚本:

import pymysql conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='你的密码', charset='utf8mb4' ) with conn.cursor() as cur: cur.execute('SELECT VERSION(), @@character_set_server') print(cur.fetchone()) conn.close()

这段脚本能跑通,说明 TCP 连接、认证、字符集三件事都是对的。如果报连接被拒绝,检查端口是不是被防火墙拦了;如果报认证失败,检查密码和认证插件;如果字符集不对,回到配置文件那一节调整。

Java 项目里常见的问题在连接串上。JDBC 的 URL 一般长这样:

jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false

serverTimezone这个参数在老版本驱动里是必须的,不写会报时区不识别的错。useSSL在本地开发一般关掉,避免证书相关的警告干扰。这两个参数是 JDBC 连接 MySQL 时最常被漏掉的东西。

7. 报错排查实录:从 command not found 到 Access denied

前面几节都是顺风顺水的流程,但现实中出问题的概率不低。这一节我把遇到过的典型故障整理成排查链路,你可以照着顺序走一遍。

7.1 服务起不来的完整排查顺序

第一步看进程在不在:ps aux | grep mysqld。没有输出说明服务压根没启动,那问题在"启动"这个动作本身。第二步看启动日志:Homebrew 装的位置一般在/opt/homebrew/var/mysql/下的.err文件,DMG 装的在/usr/local/mysql/data/下。日志里的错误信息通常直接告诉你原因,比如端口被占、数据目录权限不对、配置文件语法错误。

第三步看端口:lsof -i :3306。如果有别的进程占着这个端口,MySQL 起不来。常见占用者是另一个 MySQL 实例、某些应用自带的数据库、或者容器映射。杀掉占用进程,或者改 MySQL 的端口,二者选一。

第四步看数据目录权限。MySQL 需要以特定用户身份读写数据目录,如果是手动创建或迁移过的目录,权限可能不对。用ls -l看一眼归属,必要时用chown改。在 macOS 上还有一种情况是系统完整性保护或隐私权限拦住了访问,尤其是数据目录放在用户目录下的时候,这一点很容易被忽略。

7.2 密码忘了的完整处理流程

忘记 root 密码不是死局,但流程稍微长一点。核心思路是让 MySQL 启动时跳过权限验证,改完密码再恢复正常启动。

第一步停掉服务。第二步用--skip-grant-tables参数启动,这样任何用户都不需要密码就能进。第三步用mysql -u root无密码登录,执行FLUSH PRIVILEGES;刷新权限表,然后ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';。第四步退出,正常重启服务,用新密码登录验证。

这里有个容易卡住的点:在跳过权限验证的模式下,ALTER USER可能直接报错说权限系统未加载。解决办法就是先执行FLUSH PRIVILEGES;再改密码,顺序不能反。另外新版 MySQL 在这个模式下可能不允许改密码,那就改用UPDATE mysql.user SET authentication_string = ...的老办法,改完刷新权限重启。

7.3 端口冲突与多版本并存的识别方法

一台机器上装了不止一个 MySQL,是导致各种诡异问题的常见原因。识别方法是查进程的启动路径:ps aux | grep mysqld输出里能看到完整路径,是/opt/homebrew/...还是/usr/local/mysql/...,一目了然。再查which mysql看命令行工具指向哪个,如果客户端和服务端不是同一套,就会出现"连上了但不是我以为的那个库"的情况。

遇到这种,处理原则是只保留一套。要么彻底卸载多余的,要么让它们用不同端口、不同 socket 路径,但这样配置复杂度会上升,日常使用也容易搞混。开发机上,干净比丰富更重要。

8. 卸载与重装:把残留清干净才能装得顺

因为环境问题重装 MySQL 是常见操作,但如果卸得不干净,重装后老数据、老配置、老服务都可能干扰新实例。

8.1 Homebrew 路线的卸载步骤

顺序很重要:先停服务,再卸载包,最后清残留。具体是:

brew services stop mysql brew uninstall mysql brew cleanup

如果你装的是指定版本,把mysql换成mysql@8.0brew services stop一定要先执行,否则卸载后服务还在后台跑着,端口还被占着。

卸载完之后,数据目录通常还留着,位置在/opt/homebrew/var/mysql。如果确定数据不要了,可以手动删掉这个目录,这样下次安装会得到一个全新初始化的实例。如果数据要保留,那就别删,但要记住重装后可能需要重新初始化权限表。

配置文件如果之前手动改过/etc/my.cnf,也要检查一下,旧的配置可能跟新版本不兼容。还有 shell 配置文件里那行 PATH,卸载后应该删掉,不然会指向不存在的目录。

8.2 DMG 安装的卸载步骤与残留目录清单

DMG 方式装的 MySQL 卸载不能只靠拖到废纸篓。官方提供了卸载脚本,在安装目录下的support-files里,名字类似mysql_uninstall.sh,执行它会删掉大部分内容。执行前记得先备份数据。

如果脚本跑不了或者你想手动清,需要检查这几个位置:/usr/local/mysql(主安装目录)、/usr/local/mysql-*(版本目录)、/Library/PreferencePanes/MySql.prefPane(系统偏好设置里的面板)、/Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist(开机启动项)、/etc/my.cnf(配置文件)。这几处都清掉,才算真的卸载干净。

启动项那个 plist 特别容易漏,漏掉的后果是开机后系统还在尝试拉起一个已经不存在的 MySQL,日志里一直报错。用launchctl list | grep mysql可以确认是否有残留的启动项。

9. 装好之后的几项基础加固与日常维护习惯

MySQL 跑起来只是起点。本地开发库虽然不像生产环境那样有严格的安全要求,但几个基础习惯早点养成,能避免很多麻烦。

9.1 别用 root 跑应用、建独立的业务账号

这是我强烈建议的一条。root 权限太大,应用代码里写错一句 SQL 就可能造成不可逆的破坏。正确做法是给每个应用建独立账号,只授予它需要的库和表的权限:

CREATE USER 'appuser'@'localhost' IDENTIFIED BY '强密码'; GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'localhost'; FLUSH PRIVILEGES;

只给增删改查,不给 DROP、ALTER 这类结构变更权限。这样即使代码有漏洞,破坏范围也被限制住了。日常用 root 做管理操作,用业务账号跑应用,职责分开。

9.2 数据目录在哪、备份该怎么做

搞清楚数据目录位置是基本功。Homebrew 装的在/opt/homebrew/var/mysql,DMG 装的在/usr/local/mysql/data。用SHOW VARIABLES LIKE 'datadir';可以随时确认。这个目录里每个库对应一个文件夹,表结构和数据都在里面。

备份我推荐用逻辑备份工具,也就是mysqldump。它把库导出成 SQL 文本,跨版本、跨平台恢复都方便:

mysqldump -u root -p --databases mydb > mydb_backup.sql

恢复就是mysql -u root -p < mydb_backup.sql。这个命令建议你写成一个脚本,每周跑一次,备份文件存到别的盘或者云盘。物理备份虽然快,但版本绑定严重,本地开发场景下没必要。

9.3 开机自启与手动启停的取舍

Homebrew 的brew services start是开机自启,mysql.server start是手动启动。这两种方式怎么选,取决于你的使用频率。

如果你每天都在写代码、IDE 里随时要连数据库,那就用开机自启,省得每次开电脑还要手动启动。如果你只是偶尔用一下,平时不需要数据库常驻,那用手动启动更好,能省下几百兆内存和一部分 CPU。Mac 的内存虽然不小,但同时跑着 IDE、浏览器、各种开发服务,能省一点是一点。

想切换的话,先brew services stop mysql关掉自启,然后需要的时候用mysql.server start。反过来就是先停掉手动服务再注册自启。两种方式不能同时用,否则会出现服务被启动了两次、第二次失败的情况。

最后分享一个我自己的小习惯:在 shell 配置文件里加几个短别名,把常用的启停和登录命令简化一下。

alias mysqlstart='brew services start mysql' alias mysqlstop='brew services stop mysql' alias mysqlroot='mysql -u root -p'

每天能省下敲几十个字符的时间,更重要的是不容易敲错命令。装了这么多次 MySQL,我最大的体会是:真正花时间的从来不是安装本身,而是安装之后那些配置项和跨平台差异带来的问题。把这些提前想到、一次做对,后面能省下大把折腾的时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询