MySQL官方从未发布macOS ARM平台的DMG安装包,唯一可信方案是下载mysql-8.0.41-macos14-arm64.tar.gz,手动解压、初始化、配置launchd服务并注意libssl兼容性及plist路径硬编码问题。

直接装不了。MySQL 官方 从未发布过 macOS ARM(M1/M2/M3)平台的 DMG 安装包,所有所谓“MySQL 8.0 for M1 DMG”都是误传、第三方打包或旧版(5.7)魔改包,不可信、不安全、不维护。
MySQL 官网(https://www.php.cn/link/1c8f6ad20cb673a2c946185f794162d9 macOS 安装方式:
-
mysql-8.0.xx-macos14-arm64.dmg—— 不存在,页面无此选项 -
mysql-8.0.xx-macos14-x86_64.dmg—— 仅 Intel x86_64 架构(Rosetta 运行,性能差、兼容性风险高) -
mysql-8.0.xx-macos14-arm64.tar.gz—— 这才是 M1 原生支持的唯一官方方案(命令行压缩包,非图形化安装器)
为什么不能用 DMG?
DMG 是 macOS 图形化安装包,依赖 Apple 的 pkg installer 和预编译的 x86_64 二进制。MySQL 官方自 8.0.28 起才开始为 macOS ARM 提供原生 tar.gz 包,但始终未同步制作 DMG —— 因为:
• 启动脚本、systemd 替代方案(launchd)、权限模型在 ARM macOS 上更复杂
• DMG 自动配置会绕过用户对 /usr/local、~/Library/LaunchAgents 等路径的显式控制
• 官方优先保障服务器场景(Linux ARM),桌面端只保 tarball 最小可信交付
正确做法:用官方 tar.gz + 手动初始化
跳过所有“M1 DMG 教程”,按以下步骤操作:
- 去官网下载
mysql-8.0.41-macos14-arm64.tar.gz(当前最新稳定 ARM 原生包,8.0.42 尚未发布 macOS ARM 版) - 解压到
/usr/local:sudo tar -xzf mysql-8.0.41-macos14-arm64.tar.gz -C /usr/local/
- 创建软链确保命令可用:
sudo ln -sf /usr/local/mysql-8.0.41-macos14-arm64 /usr/local/mysql
- 初始化数据目录(必须用
--initialize-insecure或提前生成配置):sudo /usr/local/mysql/bin/mysqld --initialize-insecure --user=$(whoami) --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 启动服务(用 launchd,非
mysqld_safe):sudo /usr/local/mysql/support-files/mysql.server start
- 首次登录:
/usr/local/mysql/bin/mysql -u root --skip-password
(因--initialize-insecure不设密码)
常见报错与绕过点
• dyld[xxxx]: Library not loaded: @rpath/libssl.1.1.dylib → macOS 14+ 已弃用 OpenSSL 1.1,需手动替换为系统自带 LibreSSL 或降级到 8.0.33(仍带 libssl.1.1)
• Operation not permitted → 关闭 SIP(不推荐)或改用用户级安装(~/mysql),但需重写所有路径和 launchd plist
• Table 'mysql.plugin' doesn't exist → 初始化前未清空 data/ 目录,或重复运行 mysqld --initialize 导致元数据损坏
• Can't connect to local MySQL server → 检查 ps aux | grep mysqld 是否真在运行;macOS 上默认 socket 路径是 /tmp/mysql.sock,不是 Linux 的 /var/run/mysqld/mysqld.sock
最关键的细节:MySQL 在 macOS ARM 上不走 systemd,也不走传统 init.d,它依赖 mysql.server 脚本生成的 launchd plist(位于 /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist)。这个 plist 默认硬编码了 basedir 和 datadir,一旦你移动了 /usr/local/mysql,就必须手动编辑 plist 并 sudo launchctl unload/load,否则重启后服务消失——这点极易被忽略。


















