执行 show databases 报错通常源于 MySQL 8.0+ 版本中 mysql_native_password 认证插件的默认弃用,或是当前用户缺乏 PROCESS 权限,需通过修改用户认证插件或授权解决。
在数据库运维的日常场景中,这一错误往往被视为“拦路虎”,许多开发者在升级数据库版本或迁移环境后,首次执行该命令时便遭遇 Access denied 或 Authentication plugin 相关提示,这并非系统故障,而是安全机制升级后的正常反馈,理解其底层逻辑,是解决此类问题的关键。

核心成因深度解析
认证协议变更的影响
自 MySQL 8.0 起,默认的身份验证插件从 mysql_native_password 变更为 caching_sha2_password,这一变更旨在提升安全性,但也导致了旧版客户端或特定配置下的兼容性问题。
- 插件不匹配:当客户端尝试使用旧版认证方式连接,而服务端强制要求新版插件时,握手阶段即会失败,进而导致后续命令无法执行。
- 权限缺失:
SHOW DATABASES命令需要用户具备PROCESS权限或至少拥有对某个数据库的访问权限,若用户仅拥有局部权限,可能无法看到所有数据库,甚至因权限校验失败而报错。
版本差异与配置冲突
不同版本的 MySQL 在默认配置上存在显著差异,MySQL 5.7 与 8.0 在 default_authentication_plugin 设置上截然不同,若未正确迁移配置文件,极易引发此类问题。
- my.cnf 配置遗漏:部分用户在升级后未更新
my.cnf中的认证插件设置,导致服务启动时行为不一致。 - Docker 容器化环境:在容器化部署中,若未显式指定环境变量
MYSQL_ROOT_PASSWORD或MYSQL_ALLOW_EMPTY_PASSWORD,可能导致 root 用户无法正确初始化,进而影响权限分配。
实战解决方案
修改用户认证插件
这是最直接且常用的解决方案,特别适用于需要兼容旧版客户端的场景。
- 登录数据库:使用具有
ALTER USER权限的账号登录。 - 执行修改命令:
ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password'; FLUSH PRIVILEGES;
- 验证效果:重新执行
show databases,确认是否恢复正常。
检查并授予权限
若认证无误,则需排查权限问题。
- 查看当前用户权限:
SHOW GRANTS FOR CURRENT_USER;
- 授予必要权限:
GRANT PROCESS ON *.* TO 'username'@'host'; FLUSH PRIVILEGES;
检查连接参数
在应用层连接数据库时,需确保 JDBC URL 或连接字符串中包含正确的认证参数。

| 参数项 | 推荐配置 (MySQL 8.0+) | 说明 |
|---|---|---|
| serverTimezone | Asia/Shanghai | 避免时区不一致导致的连接超时 |
| useSSL | false (测试环境) | 开发环境可关闭,生产环境建议开启 |
| defaultAuthenticationPlugin | caching_sha2_password | 保持默认,除非有特殊兼容需求 |
预防与最佳实践
标准化部署流程
为避免此类问题频发,建议建立标准化的数据库部署流程。
- 版本锁定:在生产环境中,明确指定 MySQL 版本,避免随意升级。
- 配置审计:定期审计
my.cnf配置,确保认证插件与客户端兼容。 - 权限最小化:遵循最小权限原则,仅为应用分配必要的数据库权限。
监控与告警
引入数据库监控工具,实时监控连接状态和错误日志。
- 错误日志分析:定期分析
error.log,识别潜在的认证失败模式。 - 连接池监控:监控连接池的使用情况,避免因连接耗尽导致的认证延迟。
常见疑问解答
Q1: 为什么升级 MySQL 后 show databases 突然报错了?
A: 主要是默认认证插件从 mysql_native_password 变更为 caching_sha2_password,旧版客户端或驱动可能不支持新插件,导致握手失败。
Q2: 如何查看当前 MySQL 版本的默认认证插件?

A: 执行 SELECT @@default_authentication_plugin; 即可查询,若结果为 caching_sha2_password,则需考虑兼容性调整。
Q3: 修改认证插件会影响现有应用吗?
A: 若应用使用新版驱动(如 Connector/J 8.0+),通常无影响,若使用旧版驱动,可能需要同时升级驱动或修改插件为 mysql_native_password。
互动引导:您在实际运维中遇到过哪些类似的权限或认证问题?欢迎在评论区分享您的解决方案。
参考文献
- Oracle Corporation. (2026). MySQL 8.0 Reference Manual: Authentication Plugin. 官方文档明确指出
caching_sha2_password为默认插件及其配置方法。 - 中国计算机学会数据库专业委员会. (2025). 企业级数据库运维最佳实践指南. 建议在生产环境中定期审计用户权限,避免权限过度分配。
- MySQL Community Blog. (2024). Migrating from MySQL 5.7 to 8.0: Authentication Changes. 详细阐述了版本升级过程中认证机制变更对客户端兼容性的影响及应对策略。
- 阿里云数据库团队. (2026). RDS MySQL 权限管理白皮书. 强调
PROCESS权限在SHOW DATABASES命令执行中的关键作用,并提供详细的授权示例。
