phpmyadmin 连不上 mysql 主因是远程 mysql 未开放访问:需修改 bind-address 为 0.0.0.0 或指定 ip,创建匹配来源 ip 的专用用户并授权,正确配置 config.inc.php 中 host/port/ssl,且确保网络、防火墙、安全组放行对应端口。
phpmyadmin 本身不连数据库,它只是个界面;真正发起连接的是 php 进程,所以“连不上”90% 不是 phpmyadmin 配置错,而是远程 mysql 根本没允许你连。
MySQL 服务端 bind-address 必须放开
MySQL 默认只监听 127.0.0.1,哪怕你填了公网 IP,请求也根本到不了 MySQL 进程。
- 查当前绑定:
mysql -e "SHOW VARIABLES LIKE 'bind_address';",返回127.0.0.1就说明没开远程 - 改配置文件(Ubuntu 常在
/etc/mysql/mysql.conf.d/mysqld.cnf,CentOS 常在/etc/my.cnf):
把bind-address = 127.0.0.1改成bind-address = 0.0.0.0(测试用)或具体内网 IP(如192.168.1.100) - 改完必须重启服务:
sudo systemctl restart mysql(或mysqld)
MySQL 用户 Host 字段必须匹配来源 IP
用户账号的 Host 和你实际连接的源 IP 不一致,TCP 层就直接拒绝,phpMyAdmin 甚至收不到错误提示。
- 别直接改
root用户的Host字段——容易锁死自己 - 新建专用用户更安全:
CREATE USER 'pmauser'@'192.168.1.50' IDENTIFIED BY 'strongpass';(192.168.1.50是 phpMyAdmin 所在服务器的 IP) - 授予权限:
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'pmauser'@'192.168.1.50';(生产环境避免用ALL PRIVILEGES) - 执行
FLUSH PRIVILEGES;生效 - 验证:
SELECT host, user FROM mysql.user WHERE user = 'pmauser';,确认host列值精确匹配
phpMyAdmin 的 config.inc.php 要配对且不写死 localhost
$cfg['Servers'][$i]['host'] 写成 'localhost' 或 '127.0.0.1',PHP 进程就会去连本机 MySQL,完全绕过远程目标。
-
$cfg['Servers'][$i]['host']填远程 MySQL 的真实 IP 或可解析域名(如'192.168.0.200') -
$cfg['Servers'][$i]['port']显式设值(如'3307'),别依赖默认3306 -
$cfg['Servers'][$i]['auth_type']推荐用'cookie',避免明文密码写进配置;若用'config',务必确保config.inc.php不能被 Web 直接访问 - 如果远程 MySQL 启用了 SSL,必须加:
$cfg['Servers'][$i]['ssl'] = true;,否则连接会静默失败
网络链路和防火墙必须通
phpMyAdmin 所在服务器要能从 TCP 层连上远程 MySQL 端口,不是浏览器能访问 phpMyAdmin 就代表能通。
- 从 phpMyAdmin 所在机器执行:
nc -zv 192.168.0.200 3307(或telnet 192.168.0.200 3307),不通就卡在这步 - 检查远程 MySQL 服务器的防火墙:
ufw status(Ubuntu)或firewall-cmd --list-ports(CentOS),确认3307/tcp已放行 - 云服务器还要检查安全组规则——必须允许来自 phpMyAdmin 服务器 IP 的入向
3307流量 - 跨公网强烈建议走 SSH 隧道或反向代理,裸开
3306/3307风险极高
最容易被忽略的是:MySQL 的 bind-address 和用户 Host 是两道独立关卡,少一个都连不上;而 nc 测试必须从 phpMyAdmin 所在机器发起,不是从你本地电脑。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











