Mac上装了MySQL之后很久没碰,突然要用的时候发现root密码怎么都想不起来,这种尴尬的情况其实相当常见。好在MySQL提供了官方支持的密码重置途径,只要还能控制本机服务,就不需要卸载重装。下面介绍两种在macOS环境下重置root密码的方法,覆盖Homebrew安装和官方dmg安装两种场景,操作完成后即可用新密码正常登录。

方法一:使用skip-grant-tables跳过权限验证
这是最通用的做法,原理是让MySQL启动时不加载授权表,这样所有用户都能免密登录,再进入系统库直接改密码。整个流程分为停服务、改配置、免密登录、更新密码、恢复配置五个步骤。
首先确认MySQL是怎么安装的。如果是用Homebrew装的,执行brew services list查看服务状态,用brew services stop mysql停止服务;如果是官网dmg包安装的,在系统设置的最底部找到MySQL面板,点击Stop MySQL Server按钮即可。也可以用命令行sudo /usr/local/mysql/support-files/mysql.server stop来停止(不同版本路径可能是/opt/homebrew,视安装位置而定)。
接着以跳过权限的方式启动MySQL。dmg安装的用户可以直接执行:
sudo /usr/local/mysqld-safe --skip-grant-tables --skip-networking &
Homebrew安装的用户则可以通过mysqld_safe --skip-grant-tables &启动,或者临时修改my.cnf配置文件(一般位于/etc/my.cnf或/usr/local/etc/my.cnf),在[mysqld]段落下加一行skip-grant-tables,再正常启动服务。注意--skip-networking参数是为了避免改密码期间有外部连接进来,本机操作不受影响。
服务起来后,直接输入mysql -u root就能免密进入,不需要输入密码。进入后依次执行以下SQL:
-- 刷新权限,让GRANT语句可用
FLUSH PRIVILEGES;
-- 直接更新密码,MySQL 8.0写法
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
-- MySQL 5.7及以下版本可以改用
-- SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');改完后退出客户端,把之前加的skip-grant-tables配置删掉,重启MySQL服务,再用mysql -u root -p输入新密码登录验证。如果版本是MySQL 8.4,ALTER USER可能被禁用,需要先执行UNLOCK ACCOUNT或改用SET PASSWORD的方式。
方法二:通过init-file自动执行重置语句
如果觉得手动操作麻烦,或者环境里不方便开免密模式,可以用官方文档推荐的init-file方式。思路是写一个包含改密码语句的文本文件,让MySQL启动时自动执行它。
先停止MySQL服务,然后新建一个文件,比如放在家目录下叫reset.sql,内容只有一行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
接着以指定初始化文件的方式启动服务:
sudo /usr/local/mysqld-safe --init-file=/Users/你的用户名/reset.sql &
等MySQL完全启动后(可以看日志确认),密码就已经被改掉了。此时停掉服务,用正常方式重启,再用新密码登录测试。用完之后记得删除reset.sql文件,因为里面存着明文密码,留在磁盘上有安全隐患。这种方法的好处是全程不需要人工干预客户端交互,适合写进脚本批量处理。
操作中容易踩的坑
重置过程本身不难,但有几个细节经常让人卡住。第一个坑是密码字段的版本差异:网上一些老教程会让人直接UPDATE mysql.user表里的password字段,这在MySQL 5.7之后会报错,因为该字段早已改名为authentication_string。如果一定要用UPDATE方式,语句应该写成UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root',而且只适用于5.7,8.0里PASSWORD函数已经被移除了。
第二个坑是认证插件问题。MySQL 8.0默认使用caching_sha2_password插件,某些老版本的Navicat或客户端连不上。如果重置密码后遇到这类兼容问题,可以在ALTER USER时显式指定插件:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'。
第三个坑是改完密码必须执行FLUSH PRIVILEGES的情况。如果只是用ALTER USER或SET PASSWORD,语句本身会立即生效,可以不刷新;但如果用了UPDATE直接改表,就必须刷新权限,否则重启前都不生效。另外,skip-grant-tables模式下执行GRANT等相关语句前也需要先FLUSH PRIVILEGES加载权限表,否则会报The MySQL server is running with the --skip-grant-tables option错误。
最后提醒一点:如果机器上同时装了多个版本的MySQL,操作前先用which mysql和mysql --version确认当前连接的是哪个实例,改错了实例自然登不上。密码重置成功后,建议立即用新密码创建一个备用管理员账号,并考虑开启Keychain或其他密码管理工具保存,避免下次再陷入同样的窘境。
mac mysql重置密码mysql忘记root密码mysql skip-grant-tables修改时间:2026-09-12 06:56:27