资讯动态

Mac 安装卸载 MySQL 5.7.11 全攻略:避坑与多版本共存

发布时间:2026/10/9 20:41:25 来源:尧图企业网站定制
简介这份PDF资料面向在Mac系统上折腾MySQL 5.7.11的开发者与运维初学者聚焦安装与彻底卸载两个高频痛点。内容覆盖从官网下载DMG安装包、按向导完成安装、记录临时root密码到通过终端修改初始密码、验证登录的完整流程卸载部分则给出逐条清理命令涉及/usr/local、/Library/StartupItems、/Library/PreferencePanes、/Library/Receipts及/var/db/receipts等目录并提醒检查hostconfig与LaunchDaemons残留避免重装时冲突。资源包共1个PDF文件约47KB篇幅精炼适合作为操作时的对照清单。目前已有1571人学习下载。对于反复安装失败、卸载不干净或忘记临时密码的读者可借助其中的命令与排查思路快速定位问题减少误删风险让环境恢复干净后再重新部署。1. Mac 安装和卸载 Mysql5.7.11 的方法为什么老版本反而更难搞在 Mac 上装 MySQL 5.7.11很多人第一反应是“brew install 一把梭”结果发现 Homebrew 默认给的是 8.x想指定 5.7.11 这个小版本公式里早就没有对应 bottle 了。更麻烦的是卸载——官方 dmg 装完之后系统偏好设置里留了个面板/usr/local/mysql目录还在/etc/my.cnf可能被改过launchd里还挂着守护进程直接删文件夹会留下一个“幽灵服务”下次装别的版本端口冲突到怀疑人生。这篇就是把我自己在 Mac 上反复装、反复卸 MySQL 5.7.11 的流程拆开讲清楚从 dmg 安装到 tar.gz 手动部署从完整卸载到残留清理再到参数调优和踩坑记录。适合两类人一类是要复现老项目、必须锁 5.7.11 的开发者另一类是装完发现卸不干净、想彻底重来的运维新手。下面所有命令都在 macOS 上验证过路径和参数可以直接抄。2. 安装前的环境确认与两种安装路线选型2.1 先确认芯片架构和系统版本别拿 Intel 包往 M 系列上怼MySQL 5.7.11 是 2016 年发布的版本官方 dmg 只提供 x86_64 架构。如果你用的是 Apple SiliconM1/M2/M3直接装 x86_64 的 dmg 会走 Rosetta 转译能跑但性能有损耗而且某些依赖库路径会变得很绕。所以第一步不是下载是确认自己机器的底子。# 查看芯片架构输出 arm64 说明是 Apple Siliconx86_64 是 Intel uname -m # 查看 macOS 版本5.7.11 在较新系统上可能需要额外处理 sw_vers # 确认是否已安装过 MySQL避免端口和目录冲突 which mysql ls -la /usr/local/mysql 2/dev/null brew list | grep -i mysql逻辑说明uname -m决定你后面选哪个安装包sw_vers用来判断系统版本是否过新导致兼容问题后两条是排查残留很多人装不上就是因为之前卸了一半。参数上没什么可调的但要注意如果which mysql有输出先别急着覆盖按第 4 章的卸载流程清干净再装。2.2 dmg 安装和 tar.gz 手动部署到底选哪个两条路线各有适用场景我一般按下面这个表来选对比项dmg 安装tar.gz 手动部署操作难度低双击下一步中需要手动初始化路径可控性固定在 /usr/local/mysql可自定义灵活卸载彻底度差残留多好删目录即可适合场景快速验证、临时用长期开发、多版本共存Apple Silicon 兼容需 Rosetta可自行编译或选对应包如果你只是临时跑个老项目dmg 够用如果你要在同一台机器上同时保留 5.7 和 8.x强烈建议 tar.gz 手动部署到独立目录比如/usr/local/mysql-5.7.11这样卸载时直接删目录不会污染全局。2.3 dmg 安装的完整步骤与初始密码处理下载好mysql-5.7.11-macos10.12-x86_64.dmg之后双击挂载运行 pkg 安装包。安装过程中会弹出一个临时密码窗口这个密码只显示一次务必先复制到记事本。# 安装完成后把 MySQL 加入 PATH编辑 shell 配置文件 # 如果是 zshmacOS 默认编辑 ~/.zshrc echo export PATH/usr/local/mysql/bin:$PATH ~/.zshrc source ~/.zshrc # 验证版本 mysql --version # 应输出mysql Ver 14.14 Distrib 5.7.11, for osx10.12 (x86_64) # 用临时密码登录并立即修改 mysql -u root -p # 输入临时密码后执行 ALTER USER rootlocalhost IDENTIFIED BY 你的新密码; FLUSH PRIVILEGES;逻辑说明PATH 不配的话每次都要敲全路径很烦。临时密码是安装器随机生成的过期不候。ALTER USER是 5.7 的标准改密语法8.x 也兼容但 5.6 及以下要用SET PASSWORD别搞混。改完密码后建议再执行一次mysql_secure_installation把匿名用户和测试库清掉。2.4 tar.gz 手动部署初始化数据目录与启动手动部署的核心是mysqld --initialize它会生成数据目录和临时密码。注意 5.7.11 的初始化和 5.6 不同不能用mysql_install_db了。# 假设包解压到 /usr/local/mysql-5.7.11 cd /usr/local/mysql-5.7.11 # 创建数据目录注意权限必须是当前用户不能是 root mkdir -p data chown -R $(whoami) data # 初始化--basedir 和 --datadir 都要写绝对路径 bin/mysqld --initialize --user$(whoami) \ --basedir/usr/local/mysql-5.7.11 \ --datadir/usr/local/mysql-5.7.11/data # 初始化完成后临时密码在输出日志里类似 # [Note] A temporary password is generated for rootlocalhost: xxxxxxxx # 启动服务前台运行方便看日志 bin/mysqld_safe --datadir/usr/local/mysql-5.7.11/data 逻辑说明--initialize会生成一个随机 root 密码并打印到终端一定要往上翻找。--user指定运行用户用 root 跑 MySQL 是安全大忌。mysqld_safe是官方推荐的启动包装脚本崩了会自动重启。参数上--basedir和--datadir必须绝对路径相对路径在 launchd 里会翻车。2.5 配置 my.cnf5.7.11 必须显式声明的几个参数5.7 开始sql_mode默认变严格ONLY_FULL_GROUP_BY会让很多老 SQL 直接报错。如果你是从 5.6 迁移过来的项目建议在my.cnf里显式放宽。# /etc/my.cnf 或 /usr/local/mysql-5.7.11/my.cnf [mysqld] basedir/usr/local/mysql-5.7.11 datadir/usr/local/mysql-5.7.11/data port3306 socket/tmp/mysql.sock # 兼容老项目去掉 ONLY_FULL_GROUP_BY sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # 字符集统一 utf8mb4避免 emoji 存不进去 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci # 5.7.11 默认密码过期策略本地开发建议关掉 default_password_lifetime0逻辑说明sql_mode那一长串是 5.7 的默认值去掉ONLY_FULL_GROUP_BY这样既保留严格模式的好处又不会让老 SQL 挂掉。utf8mb4是必须的5.7 默认latin1在 Mac 上经常导致中文乱码。default_password_lifetime0是防止密码 360 天过期本地开发没必要开。3. 卸载 MySQL 5.7.11从进程到目录的彻底清理3.1 先停服务再删文件顺序反了会留幽灵进程卸载最忌讳的就是直接rm -rf /usr/local/mysql。正确顺序是停 launchd 服务 → 杀残留进程 → 删目录 → 清配置。下面这套命令我用了很多次能清得比较干净。# 1. 查看 MySQL 相关进程 ps aux | grep mysql # 2. 停止 launchd 守护进程dmg 安装的会有这个 sudo launchctl unload -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist 2/dev/null # 3. 杀掉所有 mysql 进程 sudo pkill -f mysqld sudo pkill -f mysql # 4. 确认没有残留 ps aux | grep mysql | grep -v grep逻辑说明launchctl unload是卸载 launchd 配置-w表示永久禁用。pkill -f按完整命令行匹配比killall更精准。第 4 步如果还有输出说明有进程没杀干净手动kill -9对应 PID。3.2 删除安装目录、数据目录和配置文件停完服务就可以删文件了。注意 dmg 安装和 tar.gz 安装的路径不一样按实际情况来。# dmg 安装的默认路径 sudo rm -rf /usr/local/mysql sudo rm -rf /usr/local/mysql-* # 删除数据目录如果你自定义过换成自己的路径 sudo rm -rf /usr/local/var/mysql sudo rm -rf /usr/local/mysql/data # 删除配置文件 sudo rm -f /etc/my.cnf sudo rm -f /etc/mysql/my.cnf sudo rm -rf /usr/local/mysql/etc # 删除 launchd 配置文件 sudo rm -f /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist sudo rm -f /Library/LaunchDaemons/com.mysql.mysql.plist # 删除偏好设置面板dmg 安装的会有 sudo rm -rf /Library/PreferencePanes/MySQL.prefPane sudo rm -rf /Library/Receipts/mysql-5.7.11*逻辑说明/usr/local/mysql-*是通配防止你装过多个小版本。/Library/Receipts里是安装包收据不删的话系统可能认为 MySQL 还装着。偏好设置面板不删系统偏好设置里会一直有个 MySQL 图标点进去报错。3.3 清理 PATH 和 shell 配置里的残留很多人卸载完发现终端里mysql命令还能补全就是因为 shell 配置文件里的 PATH 没删。# 查看当前 PATH 里有没有 mysql 相关路径 echo $PATH | tr : \n | grep -i mysql # 编辑 ~/.zshrc 或 ~/.bash_profile删掉类似下面这行 # export PATH/usr/local/mysql/bin:$PATH # 重新加载配置 source ~/.zshrc # 验证 which mysql # 应该输出mysql not found逻辑说明tr : \n把 PATH 按冒号拆成行方便 grep。如果which mysql还有输出检查/usr/local/bin里有没有软链接有的话一并删掉。3.4 验证卸载是否彻底三个检查点卸载完别急着装新版本先做三个检查确认干净了再动手。# 检查点 1端口 3306 是否还被占用 lsof -i :3306 # 无输出表示端口已释放 # 检查点 2相关目录是否还存在 ls -d /usr/local/mysql* 2/dev/null ls -d /usr/local/var/mysql 2/dev/null # 无输出表示目录已清 # 检查点 3launchd 里是否还有 MySQL 服务 launchctl list | grep -i mysql # 无输出表示服务已卸载逻辑说明lsof -i :3306是查端口占用最直接的方法。launchctl list列出所有加载的服务grep 一下就知道有没有残留。三个检查点都通过才算真正卸干净。4. 避坑与常见问题排查4.1 坑一安装后 root 临时密码找不到登录被拒现象dmg 安装完弹窗关了没记住临时密码mysql -u root -p怎么输都报Access denied。原因5.7 的临时密码只在安装时显示一次关掉就没了日志里也不一定写。解决停掉 MySQL用--skip-grant-tables模式启动跳过权限验证后改密码。# 停服务 sudo pkill -f mysqld # 跳过权限表启动 sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables # 无密码登录 mysql -u root # 在 MySQL 里执行 FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY 新密码; FLUSH PRIVILEGES; EXIT; # 重启正常服务 sudo pkill -f mysqld sudo /usr/local/mysql/bin/mysqld_safe 注意--skip-grant-tables模式下任何本地用户都能无密码登录改完密码立刻重启别在这个模式下跑业务。4.2 坑二Apple Silicon 上 dmg 安装后启动报架构错误现象M1/M2 机器上装完 dmg启动时报bad CPU type in executable或直接闪退。原因5.7.11 的 dmg 是 x86_64 二进制没有 arm64 版本Rosetta 没装或没生效。解决先装 Rosetta再重新安装。# 安装 Rosetta 2 softwareupdate --install-rosetta --agree-to-license # 确认 Rosetta 可用 /usr/bin/pgrep oahd # 有输出表示 Rosetta 在运行 # 重新安装 dmg或者用 tar.gz 版本手动部署如果还是不行建议直接走 tar.gz 路线用arch -x86_64前缀启动或者找社区编译的 arm64 版本。但 5.7.11 太老arm64 编译坑很多我一般建议 Apple Silicon 用户直接上 5.7 的最后一个版本 5.7.44兼容性好很多。4.3 坑三卸载后重装端口 3306 被占用现象卸载完 MySQL装新版本时启动报Address already in use。原因旧进程没杀干净或者有别的服务比如 Docker 里的 MySQL占着 3306。解决先查占用再决定杀谁。# 查 3306 占用 sudo lsof -i :3306 # 如果输出里有 mysqld说明旧进程还在 sudo kill -9 PID # 如果是 Docker 容器停掉对应容器 docker ps | grep 3306 docker stop 容器ID # 确认端口释放 sudo lsof -i :3306注意kill -9是最后手段先试kill -15让进程优雅退出。Docker 容器占端口的情况很常见别只盯着 MySQL 本身。4.4 坑四my.cnf 改了不生效参数还是默认值现象明明在/etc/my.cnf里改了sql_mode重启后SELECT sql_mode还是老样子。原因MySQL 读配置文件的顺序有优先级/etc/my.cnf不一定被读到或者被其他文件覆盖。解决用mysqld --verbose --help查实际读取的配置文件路径。# 查看 MySQL 实际读取的配置文件顺序 mysqld --verbose --help | grep -A 1 Default options # 输出里会列出类似 # /etc/my.cnf # /etc/mysql/my.cnf # /usr/local/mysql/etc/my.cnf # ~/.my.cnf # 确认哪个文件存在且被读取把配置写到优先级最高的那个逻辑说明MySQL 按顺序读多个配置文件后面的覆盖前面的。~/.my.cnf优先级最高但只对当前用户生效。生产环境建议统一写在datadir同级的my.cnf里避免混乱。4.5 坑五卸载后系统偏好设置里 MySQL 图标还在现象按流程删了目录和 plist系统偏好设置里 MySQL 面板还在点开报错。原因PreferencePanes目录没删干净或者有缓存。解决删面板文件清缓存重启系统偏好设置。# 删除面板 sudo rm -rf /Library/PreferencePanes/MySQL.prefPane # 清理缓存 sudo rm -rf ~/Library/Caches/com.apple.systempreferences* # 重启系统偏好设置 killall SystemPreferences注意killall SystemPreferences会强制关闭系统偏好设置窗口重新打开就看不到 MySQL 图标了。如果还在检查/Library/PreferencePanes下有没有其他 MySQL 相关文件。5. 进阶技巧多版本共存与快速切换的实操方法如果你既要用 5.7.11 跑老项目又要用 8.x 跑新项目最省心的方案是 tar.gz 部署到不同目录用 shell 函数切换 PATH。这样不用反复卸载安装切换成本几乎为零。# 在 ~/.zshrc 里定义切换函数 function use_mysql57() { export PATH/usr/local/mysql-5.7.11/bin:$PATH export MYSQL_HOME/usr/local/mysql-5.7.11 echo Switched to MySQL 5.7.11 } function use_mysql80() { export PATH/usr/local/mysql-8.0.35/bin:$PATH export MYSQL_HOME/usr/local/mysql-8.0.35 echo Switched to MySQL 8.0.35 } # 使用时直接敲函数名 # use_mysql57 # mysql --version逻辑说明export PATH把对应版本的 bin 目录插到最前面which mysql就会指向那个版本。MYSQL_HOME是给其他工具比如某些客户端用的环境变量。两个版本的数据目录要分开端口也要错开比如 5.7 用 33068.0 用 3307在各自的my.cnf里配好。启动时分别指定配置文件# 启动 5.7.11 /usr/local/mysql-5.7.11/bin/mysqld_safe \ --defaults-file/usr/local/mysql-5.7.11/my.cnf # 启动 8.0.35 /usr/local/mysql-8.0.35/bin/mysqld_safe \ --defaults-file/usr/local/mysql-8.0.35/my.cnf 验证两个实例都在跑# 分别连接两个端口 mysql -u root -p -P 3306 -e SELECT VERSION(); mysql -u root -p -P 3307 -e SELECT VERSION();这里有个血泪经验两个版本的socket文件路径一定要分开否则客户端会连错实例。5.7 用/tmp/mysql57.sock8.0 用/tmp/mysql80.sock在各自的my.cnf里写死。另外mysqld_safe在 8.0 里已经被标记为废弃虽然还能用但官方推荐用systemd或直接mysqld启动Mac 上没 systemd用mysqld_safe问题不大。还有一个后悔药级别的技巧在卸载任何版本之前先用mysqldump把数据导出来。命令很简单mysqldump -u root -p --all-databases all_backup.sql别问我为什么强调这个问就是曾经手快删过数据目录没有备份重建花了一下午。现在我的习惯是任何涉及删除目录的操作之前先跑一遍mysqldump哪怕数据不重要养成肌肉记忆。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑