一波三折:在 macOS 13 上搞定 MySQL 8.0 环境

一波三折:在 macOS 13 上搞定 MySQL 8.0 环境

补档说明

继上一篇“耗费一天一夜编译 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 已经不被支持了。


三、成功的解决方案

方案选择

经过多次尝试,我确定了最终方案:

  1. 找到兼容 macOS 13 的 Docker Desktop 版本:4.48.0(最后一个支持 macOS 13 的版本)
  2. 用 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 等)

五、最终环境信息

组件版本状态安装方式
PHP8.2.x✅ 可用源码编译
MySQL8.0.x✅ 运行中Docker 容器
Docker Desktop4.48.0✅ 运行中官方 DMG
操作系统macOS 13 (Ventura)✅ 老骥伏枥Intel x86_64

MySQL 连接信息

参数值
Host127.0.0.1
Port3306
Usernameroot
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 了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注