Mac 安装 MySQL 5.7.11 全攻略:dmg 与 Homebrew 安装、配置、卸载及多版本共存
简介这份资源面向在 Mac 环境下需要部署或清理 MySQL 5.7.11 的开发者与运维初学者聚焦安装与卸载两个高频痛点场景。内容以实操记录形式呈现涵盖从官网下载 DMG 安装包、按向导完成安装、保存临时 root 密码到通过终端修改初始密码并登录验证的完整流程卸载部分则给出逐条删除 /usr/local/mysql 及相关配置、清理偏好设置与启动项、检查 LaunchDaemons 残留的完整命令清单并提醒操作前做好备份。资源包共 1 个 PDF 文件大小约 47KB篇幅精炼适合作为随查随用的操作备忘。目前已有 1571 人学习下载可帮助读者少走重复安装与卸载不干净的弯路快速获得一份可对照执行的排错与清理思路。1. Mac 上装 MySQL 5.7.11为什么老版本反而更折腾在 Mac 上装 MySQL 5.7.11很多人第一反应是去官网下个 dmg 双击完事结果装完发现命令行里敲mysql提示 command not found或者服务起不来、root 密码不知道去哪找。这不是你操作有问题而是 5.7 这个版本在 macOS 上的安装路径、初始化方式和后续版本差异很大尤其是 5.7.11 这种早期小版本官方 dmg 包和 Homebrew 两条路线的行为完全不同。这篇文章面向的是需要在本地跑老项目、做兼容性测试、或者被某个依赖 5.7 的框架卡住的开发者。我会把 dmg 安装、Homebrew 安装、环境变量配置、root 密码处理、彻底卸载这几件事拆开讲清楚每一步都给出可复现的命令和参数说明让你装得上、连得通、卸得干净。2. 装之前先想清楚dmg 还是 Homebrew2.1 两条安装路线的本质区别在 macOS 上装 MySQL 5.7.11主流就两条路官方 dmg 安装包和 Homebrew。它们不是简单的“图形化 vs 命令行”区别而是安装位置、服务管理方式、配置文件路径全都不一样。dmg 安装包会把 MySQL 装到/usr/local/mysql目录下同时往系统偏好设置里塞一个 MySQL 面板服务通过launchd管理配置文件默认在/etc/my.cnf或者/usr/local/mysql/etc/my.cnf。它的好处是版本精确你下的是 5.7.11 就是 5.7.11不会被自动升级。坏处是卸载麻烦残留文件散落在好几个目录而且每次系统大版本升级后可能失效。Homebrew 走的是brew install mysql5.7这条路装到/usr/local/opt/mysql5.7Intel Mac或/opt/homebrew/opt/mysql5.7Apple Silicon服务用brew services管理配置文件在/usr/local/etc/my.cnf。它的好处是卸载干净、版本切换方便坏处是 Homebrew 的mysql5.7公式指向的是 5.7 系列的最新小版本不一定是 5.7.11 这个精确版本。所以选型逻辑很简单如果你必须精确到 5.7.11走 dmg如果你只是要一个 5.7.x 的环境跑项目Homebrew 更省心。我一般会先问自己一句这个项目有没有硬性要求 5.7.11 这个 patch 版本如果没有Homebrew 优先。2.2 dmg 安装的完整步骤与参数说明先从官方归档地址下载 5.7.11 的 dmg。注意选对架构Intel Mac 选 x86_64Apple Silicon 需要走 Rosetta 或者直接用 Homebrew 方案因为 5.7.11 时代还没有 arm64 原生包。下载完成后双击挂载运行 pkg 安装器。安装过程中会弹出一个临时密码窗口这个密码是给 root 用户用的一定要当场复制下来关掉就找不回来了。安装完成后MySQL 服务默认不会自动启动需要手动去系统偏好设置里点 Start或者用命令行# 启动 MySQL 服务dmg 安装方式 sudo /usr/local/mysql/support-files/mysql.server start # 查看服务状态 sudo /usr/local/mysql/support-files/mysql.server status # 停止服务 sudo /usr/local/mysql/support-files/mysql.server stop这三条命令是 dmg 安装方式下管理服务的核心。mysql.server脚本内部会读取/etc/my.cnf和/usr/local/mysql/etc/my.cnf如果两个文件都不存在它会用编译时的默认值启动。这里有个坑如果你之前装过其他版本的 MySQL/etc/my.cnf可能残留旧配置导致 5.7.11 启动时读错参数。安装完还要把mysql命令加到 PATH 里否则每次都要敲全路径# 把 MySQL 二进制目录加入 PATH写入当前 shell 配置 echo export PATH/usr/local/mysql/bin:$PATH ~/.zshrc source ~/.zshrc # 验证 which mysql mysql --versionwhich mysql应该输出/usr/local/mysql/bin/mysqlmysql --version应该显示 5.7.11。如果which找不到说明 PATH 没生效检查一下你用的是 zsh 还是 bash对应配置文件是~/.zshrc还是~/.bash_profile。2.3 Homebrew 安装 5.7 系列的命令与版本确认Homebrew 路线更适合不想折腾路径和权限的人。命令本身很简单# 安装 MySQL 5.7 系列 brew install mysql5.7 # 启动服务并设置开机自启 brew services start mysql5.7 # 把 mysql5.7 加入 PATH注意是 keg-only不会自动链接 echo export PATH/usr/local/opt/mysql5.7/bin:$PATH ~/.zshrc source ~/.zshrc这里的关键点是mysql5.7是 keg-only 的Homebrew 不会自动把它链接到/usr/local/bin所以必须手动加 PATH。Apple Silicon 机器上路径要换成/opt/homebrew/opt/mysql5.7/bin。装完后确认版本mysql --version # 输出类似mysql Ver 14.14 Distrib 5.7.xx, for osx10.x on x86_64如果输出的小版本号不是 5.7.11说明 Homebrew 公式已经更新到更高的 5.7.x。这时候你要么接受这个版本要么回到 dmg 路线。我一般会先跑一下brew info mysql5.7看看当前公式指向哪个版本再决定要不要继续。2.4 初始化与 root 密码5.7 和 8.0 的最大分水岭MySQL 5.7 和 8.0 在初始化行为上有一个根本区别5.7 的 dmg 安装包会自动帮你初始化数据目录并生成临时 root 密码而 Homebrew 安装的 5.7 默认数据目录是空的需要你手动初始化。dmg 安装后临时密码在安装弹窗里。如果你错过了可以尝试在日志里找# 查找临时密码dmg 安装方式 sudo grep temporary password /usr/local/mysql/data/*.err如果日志里也没有那就只能走跳过权限验证重置密码的路子# 停止 MySQL sudo /usr/local/mysql/support-files/mysql.server stop # 以跳过权限表的方式启动 sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables # 另开一个终端无密码登录 mysql -u root # 在 MySQL 里执行 FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY 你的新密码; EXIT; # 重启 MySQL 正常启动 sudo /usr/local/mysql/support-files/mysql.server restartHomebrew 安装的 5.7 初始化命令是# Homebrew 方式初始化数据目录如果 data 目录为空 mysqld --initialize --user$(whoami) # 初始化后会生成临时密码在输出里找 # 然后启动服务 brew services start mysql5.7 # 用临时密码登录并修改 mysql -u root -p--initialize和--initialize-insecure的区别要记清楚前者生成随机临时密码后者生成空密码。生产环境绝对不要用--initialize-insecure本地测试图省事可以用但用完记得马上设密码。3. 装完之后连不上排查顺序和常见坑3.1 连接失败的四个排查层次装完 MySQL 后连不上别急着重装按这个顺序排查第一层服务有没有在跑第二层socket 文件路径对不对第三层端口有没有被占用第四层用户权限和密码对不对。服务状态检查# dmg 方式 sudo /usr/local/mysql/support-files/mysql.server status # Homebrew 方式 brew services list | grep mysql # 通用方式看进程 ps aux | grep mysqld如果服务没跑先看错误日志。dmg 方式的日志在/usr/local/mysql/data/下文件名是主机名.err。Homebrew 方式的日志在/usr/local/var/mysql/下。日志里最常见的错误是Cant create/write to file和Permission denied这通常是数据目录权限不对。socket 文件路径问题在 Mac 上特别常见。MySQL 客户端默认会去找/tmp/mysql.sock但 5.7.11 的 dmg 安装可能把 socket 放在/usr/local/mysql/data/mysql.sock。连接时显式指定 socket 路径mysql -u root -p --socket/usr/local/mysql/data/mysql.sock或者在~/.my.cnf里写死[client] socket/usr/local/mysql/data/mysql.sock端口占用检查用lsof -i :3306如果被其他进程占了要么改 MySQL 端口要么干掉占用进程。3.2 避坑5.7.11 在 Mac 上的五个血泪教训坑一系统升级后 MySQL 面板消失。现象是系统偏好设置里的 MySQL 图标不见了服务也起不来。原因是 macOS 大版本升级会清理第三方偏好面板。解决办法是重新安装 dmg 包或者改用 Homebrew 方式管理服务。我现在的习惯是 dmg 装完后立刻把mysql.server脚本复制一份到~/bin下系统升级后还能用。坑二root 密码明明是对的却提示 Access denied。现象是密码确认没输错但就是连不上。原因通常是rootlocalhost和root127.0.0.1被当成了两个不同用户或者匿名用户localhost优先级更高。解决办法是先用--skip-grant-tables进去然后SELECT user, host FROM mysql.user;看清楚有哪些用户把匿名用户删掉确保rootlocalhost存在且密码正确。坑三mysql.server start卡住不动。现象是命令执行后一直没返回也不报错。原因是数据目录里有残留的 pid 文件或者 socket 文件MySQL 以为实例已经在跑。解决办法是去数据目录删掉*.pid和*.sock再重启。这个坑我踩过不止一次后来养成了每次强制关机后先检查 pid 文件的习惯。坑四Homebrew 装完mysql命令找不到。现象是brew install mysql5.7成功但敲mysql提示 command not found。原因是 keg-only 公式不会自动链接。解决办法就是前面说的手动加 PATH注意区分 Intel 和 Apple Silicon 的路径前缀。坑五修改my.cnf后服务起不来。现象是加了一行配置重启就失败。原因是 5.7.11 对某些参数的大小写和格式很敏感比如innodb_buffer_pool_size不能写成innodb_buffer_pool_size1G带单位得写字节数。解决办法是每次改配置前先备份改完用mysqld --validate-config检查语法如果版本支持或者直接看错误日志里报的是哪一行。3.3 验证安装是否成功的三条命令装完并连上之后跑这三条命令确认环境是健康的-- 确认版本 SELECT VERSION(); -- 确认数据目录和 socket 路径 SHOW VARIABLES LIKE datadir; SHOW VARIABLES LIKE socket; -- 确认默认存储引擎和字符集 SHOW VARIABLES LIKE default_storage_engine; SHOW VARIABLES LIKE character_set_server;5.7.11 的默认存储引擎应该是 InnoDB默认字符集在 5.7 里是latin1如果你要存中文需要改成utf8mb4。改字符集在my.cnf里加[mysqld] character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci [client] default-character-setutf8mb4改完重启服务再用SHOW VARIABLES确认生效。这一步不做后面插中文数据会出现乱码而且乱码了再改字符集不一定能救回来属于典型的后悔药没处买。4. 卸载 MySQL 5.7.11比安装更需要耐心4.1 dmg 安装方式的彻底卸载步骤dmg 安装的 MySQL 卸载麻烦在于文件分散。按顺序执行以下命令# 1. 停止服务 sudo /usr/local/mysql/support-files/mysql.server stop # 2. 删除数据目录和安装目录 sudo rm -rf /usr/local/mysql sudo rm -rf /usr/local/mysql-5.7.11-macos10.x-x86_64 # 3. 删除偏好设置面板 sudo rm -rf /Library/PreferencePanes/MySQL.prefPane sudo rm -rf /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist # 4. 删除配置文件 sudo rm -f /etc/my.cnf sudo rm -rf /usr/local/mysql/etc # 5. 删除日志和临时文件 sudo rm -rf /Library/Logs/MySQL sudo rm -rf /var/db/mysql执行完这些dmg 安装的 MySQL 基本就清干净了。但要注意/usr/local/mysql/data里如果有你自己的数据库文件删之前先备份。我一般会先把 data 目录整个复制到别处确认新环境跑起来没问题了再删。4.2 Homebrew 安装方式的卸载与残留清理Homebrew 方式卸载命令简单但残留清理不能省# 停止服务 brew services stop mysql5.7 # 卸载公式 brew uninstall mysql5.7 # 清理残留数据目录这一步会删掉所有数据库 rm -rf /usr/local/var/mysql # 清理配置文件 rm -f /usr/local/etc/my.cnfbrew uninstall不会删数据目录这是 Homebrew 的设计原则防止误删用户数据。所以如果你确定不要了必须手动删/usr/local/var/mysql。Apple Silicon 机器上路径是/opt/homebrew/var/mysql。4.3 卸载后如何确认没有残留卸载完跑这几条命令确认# 确认没有 mysql 进程 ps aux | grep mysql | grep -v grep # 确认命令找不到 which mysql # 确认目录不存在 ls /usr/local/mysql 2/dev/null ls /usr/local/var/mysql 2/dev/null # 确认端口没被占用 lsof -i :3306如果which mysql还有输出说明 PATH 里还有残留路径去 shell 配置文件里把对应的 export 行删掉。如果lsof -i :3306还有输出说明有别的进程占了 3306跟 MySQL 无关但会影响你下次装 MySQL。5. 版本切换与多实例共存的一个实用技巧有时候你既需要 5.7.11 跑老项目又需要 8.0 跑新项目来回卸载重装太蠢。我的做法是用 Homebrew 装两个版本通过 PATH 切换数据目录分开。# 装 5.7 和 8.0 brew install mysql5.7 brew install mysql # 切换脚本写到 ~/bin/mysql-switch #!/bin/bash case $1 in 5.7) export PATH/usr/local/opt/mysql5.7/bin:$PATH echo Switched to MySQL 5.7 ;; 8.0) export PATH/usr/local/opt/mysql/bin:$PATH echo Switched to MySQL 8.0 ;; *) echo Usage: mysql-switch [5.7|8.0] ;; esac这个脚本只能改当前 shell 的 PATH要持久化得配合source或者写进 shell 配置。更彻底的做法是用 Docker但那是另一个话题了。对于本地开发来说PATH 切换够用关键是两个版本的数据目录不能混5.7 的数据目录不能被 8.0 直接读反过来也一样混用会导致数据目录损坏这个坑没有后悔药。还有一个细节两个版本同时跑的时候端口和 socket 必须错开。5.7 用 33068.0 用 3307socket 文件也分开。在各自的my.cnf里写死# 5.7 的 my.cnf [mysqld] port3306 socket/tmp/mysql57.sock # 8.0 的 my.cnf [mysqld] port3307 socket/tmp/mysql80.sock连接的时候显式指定端口或 socket避免客户端默认连到错误的实例。我自己的习惯是给每个版本写一个 alias比如mysql57和mysql80alias 里带上完整的连接参数省得每次敲一长串。最后说一个我自己的教训装 MySQL 之前先把数据目录备份一遍卸载之前再备份一遍。5.7.11 这个版本在 Mac 上的行为跟后续版本差异不小网上很多教程是 8.0 的照着做会翻车。遇到问题先看错误日志日志里 90% 的情况都写清楚了原因比到处搜教程快得多。希望帮到你。本文还有配套的精品资源点击获取