直接修改config.inc.php中$cfg['Servers'][$i]的host、port、user、password和auth_type参数即可配置远程MySQL,但必须同步完成MySQL用户授权(如'username'@'%')、网络连通性验证(telnet/nc测试)及防火墙放行,否则将出现#1045错误或登录页卡死。
直接改 config.inc.php 里的服务器地址就行,但必须同步处理 mysql 用户授权、网络连通性和 phpmyadmin 的权限控制逻辑,否则会卡在登录页或报错“access denied”。
修改 config.inc.php 中的服务器连接参数
打开 config.inc.php,定位到 $cfg['Servers'][$i] 区块(通常从第 22 行开始),把本地默认值替换成外部 MySQL 实例的实际信息:
-
$cfg['Servers'][$i]['host']改为外部服务器 IP 或域名,比如'192.168.0.200'或'db.example.com' -
$cfg['Servers'][$i]['port']显式设为对应端口,如3307(多实例常见) -
$cfg['Servers'][$i]['user']和$cfg['Servers'][$i]['password']填写有权限的数据库账号,**不要用 root,也不要留空** - 确保
$cfg['Servers'][$i]['auth_type'] = 'cookie'(推荐)或'config'(仅限内网可信环境)
注意:如果用 'config' 模式,用户名密码会明文写在配置里,config.inc.php 必须禁止 Web 直接访问(靠 Web 服务器配置实现,不是靠 PHPMyAdmin 自身)。
MySQL 侧必须开放远程用户并授权
PHPMyAdmin 能连上不代表能登录成功——MySQL 默认只允许 localhost 连接。你得在目标 MySQL 服务器上执行:
- 创建或确认用户绑定的是
'username'@'%'或'username'@'192.168.0.100'(即 PHPMyAdmin 所在服务器 IP) - 运行
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password';(生产环境建议限制库表级权限) - 执行
FLUSH PRIVILEGES;生效 - 检查
mysql.user表中该用户的Host列是否匹配,别漏掉大小写或空格
常见错误现象:#1045 Cannot log in to the MySQL server,大概率是用户 Host 不匹配,或密码输错(注意 MySQL 8.0+ 默认用 caching_sha2_password 插件,老版本 PHP 可能不兼容)。
验证网络与防火墙连通性
PHPMyAdmin 是 PHP 进程发起连接,不是浏览器直连,所以要从 PHPMyAdmin 所在服务器出发测试:
- 用
telnet 192.168.0.200 3307或nc -zv 192.168.0.200 3307看端口是否通 - 确认 MySQL 服务监听的是
0.0.0.0:3307,不是仅127.0.0.1:3307(查my.cnf中bind-address) - 检查中间防火墙(云厂商安全组、iptables、firewalld)是否放行该端口入向流量
- 如果跨公网,强烈建议走 SSH 隧道或反向代理,避免裸奔 3306/3307
容易被忽略的一点:某些云数据库(如阿里云 RDS)默认禁用外网地址,需在控制台手动申请并绑定白名单 IP。
多实例或多个远程 MySQL 怎么配
不能只靠改一个 $i ——PHPMyAdmin 支持定义多个 $cfg['Servers'][1]、[2]、[3]…,例如:
$i = 0;
$hosts = [
['host' => '192.168.0.200', 'port' => 3307, 'user' => 'pma1', 'pass' => 'xxx'],
['host' => '192.168.0.200', 'port' => 3308, 'user' => 'pma2', 'pass' => 'yyy'],
];
foreach ($hosts as $h) {
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = $h['host'];
$cfg['Servers'][$i]['port'] = $h['port'];
$cfg['Servers'][$i]['user'] = $h['user'];
$cfg['Servers'][$i]['password'] = $h['pass'];
}
这样登录页就会出现下拉菜单,可自由切换实例。但每个实例仍需独立完成上述三步(授权、网络、防火墙),且账号密码不能复用 root。
最常被绕过的环节是 MySQL 用户 Host 字段和防火墙策略——连不上时,先在 PHPMyAdmin 服务器上 mysql -h 192.168.0.200 -P 3307 -u xxx -p 手动试一次,比看日志更快定位是权限问题还是网络问题。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











