补档说明
继上一篇“耗费一天一夜编译 PHP 8.2”之后,MySQL 的安装也没让我省心。
这篇文章记录了我从 Homebrew 源码编译失败,到最终用 Docker 成功运行 MySQL 8.0 的全过程。
同样,这篇文章也是当时的记录,远早于发布时间。
一、背景
在成功编译安装 PHP 8.2.33 之后,我需要一个 MySQL 数据库来配合本地开发。
按照常理,macOS 上用 Homebrew 安装 MySQL 应该很简单:
bash
brew install mysql@8.0
然而,现实又一次给了我教训。
二、踩坑之路
第一次尝试:Homebrew 安装 MySQL 8.0
执行 brew install mysql@8.0 后,CMake 配置阶段顺利通过:
text
-- Configuring done (98.1s)
-- Generating done (3.6s)
-- Build files have been written to: /private/tmp/mysqlA8.0-.../build
但随后的 make 编译阶段失败了:
text
make: *** [all] Error 2
查看日志,没有明确的错误信息,Homebrew 在编译失败后自动清理了临时目录。这是 macOS 13 上编译 MySQL 8.0 的常见问题——Homebrew 将 macOS 13 归类为 Tier 3 支持级别,不保证编译一定能成功。
第二次尝试:安装 MySQL 5.7
既然 8.0 编译失败,我尝试安装更成熟的 5.7 版本:
bash
brew install mysql@5.7
结果:
text
Warning: No available formula with the name "mysql@5.7".
Did you mean mysql@8.4 or mysql@8.0?
Homebrew 已经移除了 MySQL 5.7,不再提供。
第三次尝试:在 Docker Desktop 上运行 MySQL
macOS 13 系统上,最新的 Docker Desktop 版本会报错:
text
应用程序“Docker”的这个版本不能与此版本的macOS配合使用。
原因是 Docker Desktop 从 4.49.0 版本开始,要求 macOS 14 或更高版本。而我的 macOS 13 已经不被支持了。
三、成功的解决方案
方案选择
经过多次尝试,我确定了最终方案:
- 找到兼容 macOS 13 的 Docker Desktop 版本:4.48.0(最后一个支持 macOS 13 的版本)
- 用 Docker 运行 MySQL 8.0 容器:避免源码编译,直接使用官方镜像
关键步骤
1. 下载 Docker Desktop 4.48.0
官方下载地址(Intel 芯片版):
text
https://desktop.docker.com/mac/main/amd64/207573/Docker.dmg
安装时选择 “Use recommended settings”,输入 Mac 密码授权即可。
2. 验证 Docker 安装
bash
docker --version
# Docker version ***, build ***
3. 运行 MySQL 8.0 容器
bash
docker run -d \
--name mysql8 \
-e MYSQL_ROOT_PASSWORD=[密码] \
-e MYSQL_DATABASE=[数据库名] \
-p 3306:3306 \
mysql:8.0
4. 验证数据库
bash
docker ps
# CONTAINER ID IMAGE STATUS PORTS NAMES
# [容器ID] mysql:8.0 Up *** 0.0.0.0:3306->3306/tcp mysql8
docker exec -it mysql8 mysql -uroot -p[密码]
进入 MySQL 后查看数据库:
sql
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| [数据库名] |
+--------------------+
5 rows in set (0.01 sec)
四、收获的认知
1. macOS 版本是最大的变量
Homebrew 的 Tier 支持策略在 MySQL 安装上再次体现:
- macOS 13 是 Tier 3:官方不保证预编译包和编译成功
- Docker Desktop 也弃用了 macOS 13:新版本直接拒绝安装
在 macOS 上搞开发环境,系统版本太新或太旧都会带来额外的工作量。
2. 编译 vs 容器
| 方式 | 优点 | 缺点 |
|---|---|---|
| Homebrew 源码编译 | 原生,无额外依赖 | 易失败,排错困难 |
| Docker 容器 | 稳定,版本可控 | 需要安装 Docker,占用空间 |
经过 PHP 编译的“洗礼”,我选择了一条更稳定的路——用 Docker 跑 MySQL。
3. 旧版本软件要找对渠道
当官方不再支持旧系统时,需要找到最后一个兼容版本:
- Docker Desktop 4.48.0 是 macOS 13 的最后一个支持版本
- 官方历史版本下载地址依然有效
4. 容器化管理的好处
用 Docker 跑 MySQL 有几个明显优势:
- 免编译:直接拉取官方镜像,无需处理编译错误
- 可重建:容器随时可以销毁重建,不用担心污染系统
- 版本精确:可以精确指定 MySQL 版本(
mysql:8.0、mysql:8.0.x等)
五、最终环境信息
| 组件 | 版本 | 状态 | 安装方式 |
|---|---|---|---|
| PHP | 8.2.x | ✅ 可用 | 源码编译 |
| MySQL | 8.0.x | ✅ 运行中 | Docker 容器 |
| Docker Desktop | 4.48.0 | ✅ 运行中 | 官方 DMG |
| 操作系统 | macOS 13 (Ventura) | ✅ 老骥伏枥 | Intel x86_64 |
MySQL 连接信息
| 参数 | 值 |
|---|---|
| Host | 127.0.0.1 |
| Port | 3306 |
| Username | root |
| Password | [密码] |
| Database | [数据库名] |
六、常用命令备忘
bash
# 查看容器状态
docker ps
# 进入 MySQL
docker exec -it mysql8 mysql -uroot -p[密码]
# 启动/停止容器
docker start mysql8
docker stop mysql8
# 查看容器日志
docker logs mysql8
# 修改 root 密码
docker exec -it mysql8 mysql -uroot -p[密码] \
-e "ALTER USER 'root'@'%' IDENTIFIED BY '[新密码]';"
# 完全重建容器
docker stop mysql8 && docker rm mysql8
docker run -d --name mysql8 -e MYSQL_ROOT_PASSWORD=[密码] -p 3306:3306 mysql:8.0
七、总结
如果说 PHP 的安装是一场“编译战争”,那 MySQL 的安装就是一场“版本博弈”。在 macOS 13 这个被各家软件厂商逐渐放弃的系统版本上,找到合适的工具版本本身就是一种挑战。
最终方案:
- Homebrew 源码编译 MySQL 8.0 ❌ 失败
- Homebrew 安装 MySQL 5.7 ❌ 不再提供
- Docker Desktop 4.48.0 + MySQL 8.0 容器 ✅ 成功
最终状态:✅ PHP 8.2.x + MySQL 8.0.x 已可用
终于,本地开发环境完全就绪了,可以继续玩 Codex 了。
