MySQL 8.0默认使用caching_sha2_password认证插件,导致phpMyAdmin等旧客户端连接失败;解决方法包括:Docker启动时加--default-authentication-plugin=mysql_native_password、修改my.cnf配置、执行ALTER USER切换用户认证方式、正确配置phpMyAdmin的config.inc.php及Docker网络参数。
MySQL 8.0 默认认证插件不兼容 phpMyAdmin
直接用 root 用户连接会失败,报错 authentication plugin 'caching_sha2_password' cannot be loaded。这是 mysql 8.0.4+ 的默认行为,而 phpmyadmin(尤其旧版本)依赖 mysql_native_password 插件。
解决方式不是降级 MySQL,而是显式指定认证插件:
- 启动容器时加
--default-authentication-plugin=mysql_native_password(Docker 场景) - 本地安装 MySQL 后,在
my.cnf或mysqld.cnf的[mysqld]段末尾追加:default_authentication_plugin=mysql_native_password - 已运行的 MySQL 实例,可对用户重置认证方式:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';FLUSH PRIVILEGES;
phpMyAdmin 配置文件必须用 config.inc.php,不能改 config.default.php
很多教程误改 config.default.php,但该文件仅作模板,实际生效的是 config.inc.php。若不存在,需从 config.sample.inc.php 复制一份:
cp config.sample.inc.php config.inc.php- 编辑
config.inc.php,定位到$cfg['Servers'][$i]['host']行 - 设为
'127.0.0.1'(而非'localhost'),避免 Unix socket 路径查找失败;远程则填 IP,如'192.168.1.100' - 确认
$cfg['Servers'][$i]['port'] = '3306';显式声明端口,别留空
Docker 下 PMA_HOST 必须填容器名,不是 localhost 或 IP
在 docker-compose.yml 中,phpmyadmin 容器要连 mysql 容器,必须用 Docker 内网 DNS 名——即 mysql(服务名),而不是 localhost 或宿主机 IP:
-
PMA_HOST=mysql✅(同一网络下容器间通信) -
PMA_HOST=127.0.0.1❌(指向 phpmyadmin 自身容器的 loopback) -
PMA_HOST=host.docker.internal仅 Windows/macOS 支持,Linux 需额外配置 - 务必确保两个服务在同一个自定义网络(如
mynetwork),否则 DNS 解析失败
PHP 扩展缺失会导致白屏或“缺少 MySQLi 扩展”错误
phpMyAdmin 5.2+ 强制要求 mysqli 和 mbstring,部分环境还缺 zip(用于导入导出)。检查方法:
- 运行
php -m | grep -E 'mysqli|mbstring|zip' - Ubuntu/Debian:
sudo apt install php-mysqli php-mbstring php-zip - CentOS/RHEL:
sudo yum install php-mysqlnd php-mbstring php-zip(注意是php-mysqlnd,非php-mysql) - 重启 Web 服务:
sudo systemctl restart apache2或sudo systemctl restart php-fpm
MySQL 8.0 连接细节多在认证和网络层,不是简单改个 host 就能通;容器场景下,DNS 名、网络隔离、插件兼容性三者缺一不可。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











