MySQL Utilities不支持caching_sha2_password,修改用户认证仍报错求解决方案
解决mysqlfrm 不支持 caching_sha2_password 认证的问题
问题根源
MySQL Utilities 1.6.5 早在2017年就停止维护了,它依赖的Python MySQL驱动版本过旧,完全不兼容MySQL 8.0推出的caching_sha2_password认证插件。哪怕你把root用户改成mysql_native_password,旧驱动可能还是会在连接握手时出现协议不匹配的问题,导致报错依旧。
实用替代方案
1. 用官方工具直接导出结构(首推)
如果你的数据库已经能在8.0.34正常运行,或者旧版本实例还能启动,别再纠结mysqlfrm:
- 旧实例可运行:登录旧MySQL,执行
mysqldump -u root -p --no-data 你的数据库名 > 表结构.sql,一键导出所有表的结构(不含数据)。 - 已升级到8.0.34:登录后用
SHOW CREATE TABLE 表名;查看单表结构并复制,或者用上面的mysqldump命令批量导出。
2. 用活跃维护的第三方工具解析.frm文件
如果旧实例彻底无法启动,只能靠.frm文件恢复结构:
- Percona Toolkit 的 pt-frm-summary:这个工具一直在更新,支持MySQL 8.0的.frm文件,执行
pt-frm-summary /path/to/你的scheme.frm,会输出完整的表结构信息,你可以直接复制整理成SQL。 - frm2sql:专门做.frm转SQL的工具,选支持8.0的版本,直接生成可执行的SQL语句。
3. 临时强制MySQL 8.0用旧认证(仅测试用,不推荐生产)
如果你非要用mysqlfrm,试试全局切换默认认证插件:
- 停掉MySQL服务。
- 打开
my.ini(Windows)或my.cnf(Linux),在[mysqld]下加一行:default_authentication_plugin=mysql_native_password - 重启MySQL服务。
- 重新执行
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES; - 再尝试运行mysqlfrm命令。
注意:这会降低数据库的安全性,生产环境别这么干,测试完记得改回默认的caching_sha2_password。
重要提示
MySQL Utilities 已经被官方淘汰,官方现在推荐用MySQL Shell、Percona Toolkit这些工具处理新版本MySQL的运维操作,别再用老旧工具给自己找麻烦。
内容的提问来源于stack exchange,提问作者Toms_Hd3z
相关产品推荐
相关产品推荐

