90%的phpMyAdmin连接失败源于MySQL服务端未开放远程访问或用户权限不匹配:需修改bind-address为0.0.0.0或指定IP,创建带精确host的授权用户,设auth_type为'cookie',并确保网络连通与端口一致。
不能只改 config.inc.php 里的 $cfg['servers'][$i]['host'] 就完事——90% 的连接失败,问题根本不在 phpmyadmin 配置端,而在 mysql 服务端未开放远程访问或用户权限不匹配。
MySQL 必须监听非本地地址
默认安装的 MySQL 绑定 127.0.0.1,意味着它拒绝所有来自其他 IP 的 TCP 连接,哪怕 phpMyAdmin 和 MySQL 在同一台机器但用域名/IP 访问也会失败。
- 编辑 MySQL 配置文件:
/etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu/Debian)或/etc/my.cnf(CentOS/RHEL) - 找到
bind-address行,改为:bind-address = 0.0.0.0(开发测试)或更安全的bind-address = 192.168.1.100(仅允许内网某 IP) - 保存后执行
sudo systemctl restart mysql;用ss -tlnp | grep :3306确认监听的是*:3306而非127.0.0.1:3306
MySQL 用户必须显式授权远程 Host
即使账号密码正确,'user'@'localhost' 和 'user'@'%' 是两个完全不同的用户。phpMyAdmin 所在服务器发起连接时,MySQL 匹配的是后者,不是前者。
- 不要直接改
root用户的host字段——容易引发权限混乱和兼容性问题 - 在目标 MySQL 中执行(注意引号和分号):
CREATE USER 'pma_admin'@'192.168.1.100' IDENTIFIED BY 'strong_pass';GRANT ALL PRIVILEGES ON *.* TO 'pma_admin'@'192.168.1.100';FLUSH PRIVILEGES; - 检查是否生效:
SELECT host, user FROM mysql.user WHERE user = 'pma_admin';——host列必须精确匹配 phpMyAdmin 服务器的出口 IP - MySQL 8.0+ 若报错
caching_sha2_password不兼容,加IDENTIFIED WITH mysql_native_password显式指定认证插件
phpMyAdmin 配置要避开 auth_type 陷阱
多服务器场景下,auth_type = 'http' 或随意用 'config' 会导致登录页不显示下拉列表、切换服务器失败、凭据明文暴露等实际问题。
- 统一设为
$cfg['Servers'][$i]['auth_type'] = 'cookie';——这是唯一能支持多服务器选择且凭据由 session 安全管理的方式 -
$cfg['Servers'][$i]['user']和$cfg['Servers'][$i]['password']可留空,登录时手动输入;若非得写死(如内网可信环境),务必确保config.inc.php无法被 Web 直接访问(靠 Apache/Nginx 配置禁止 .php 文件下载) - 索引必须从 1 开始连续:先
$i = 0;,再$i++;,每个$cfg['Servers'][$i]块里至少含host、auth_type、verbose(可选但防漏)
网络链路必须端到端可达
phpMyAdmin 是 PHP 进程发起连接,不是浏览器直连。所以 telnet 测试必须从 phpMyAdmin 所在服务器出发,而不是你本地电脑。
立即学习“PHP免费学习笔记(深入)”;
- 在 phpMyAdmin 服务器上执行:
nc -zv 192.168.0.200 3306或telnet 192.168.0.200 3306——不通就查防火墙、云厂商安全组、中间网络设备 - 确认 MySQL 实际监听端口(
show variables like 'port';),有些环境用的是3307或自定义端口,$cfg['Servers'][$i]['port']必须同步匹配 - 跨公网连接强烈不建议直接暴露 3306;应走 SSH 隧道(
ssh -L 3307:127.0.0.1:3306 user@db-server),然后 phpMyAdmin 连localhost:3307
最容易被忽略的一点:MySQL 用户的 host 值是区分大小写的,且不能有前后空格;'pma_user'@'192.168.1.100 '(末尾空格)和 'pma_user'@'192.168.1.100' 是两个不同用户,授权后仍会报 #1045。



















