php数据库怎么进远程服务器_php连接远程服务器数据库法【教程】

8次阅读

连不上远程mysql主因是网络或权限问题:先用telnet/nc测端口,再查MySQL是否监听0.0.0.0、用户是否授权@’%’、php连接时host不能写localhost而要用IP或域名,并注意云服务器安全组与白名单设置。

php数据库怎么进远程服务器_php连接远程服务器数据库法【教程】

PHP 连不上远程 MySQL 服务器?先看错误是不是 Connection refusedHost 'xxx' is not allowed to connect

绝大多数“连不上远程数据库”的问题,其实卡在两层:MySQL 服务本身没开远程访问权限,或者服务器防火墙/安全组拦住了 3306 端口。PHP 的 mysqli_connect()pdo 只是报错出口,不是根源。

  • 用本地命令行测试是否能通:运行 telnet your-server-ip 3306windows)或 nc -zv your-server-ip 3306linux/macOS),不通就说明网络层被阻断
  • 确认 MySQL 是否监听了外部地址:登录服务器后查 sudo grep "bind-address" /etc/mysql/mysql.conf.d/mysqld.cnf,如果值是 127.0.0.1,需改成 0.0.0.0 或注释掉该行,然后重启 MySQL(sudo systemctl restart mysql
  • 检查用户权限:MySQL 默认只允许 localhost 用户登录,远程连接必须显式授权,比如执行 GRANT ALL ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypass'; FLUSH PRIVILEGES;

PHP 用 mysqli_connect() 连远程库时,host 参数不能写 localhost

localhost 在 MySQL 客户端中是个特殊值,会强制走 unix socket 而非 TCP,即使你本意是想连远程——这会导致连接失败且报错不直观。必须用真实 IP 或域名。

  • 正确写法:mysqli_connect('192.168.1.100', 'myuser', 'mypass', 'mydb', 3306)mysqli_connect('db.example.com', ...)
  • 错误写法:mysqli_connect('localhost', ...)(哪怕数据库真在远程服务器上,也别这么写)
  • 如果 PHP 和 MySQL 在同一台机器但你想走 TCP(比如调试时绕过 socket 权限限制),可用 127.0.0.1 替代 localhost

PDO 连远程 MySQL 时,DSN 中的 hostport 必须显式指定

PDO 不像 mysqli 那样有默认端口 fallback 行为,漏写 port 且远程 MySQL 改过端口(比如用了 3307),就会静默超时。另外,localhost 同样触发 socket 路径逻辑,必须避开。

  • 安全写法:$dsn = 'mysql:host=192.168.1.100;port=3306;dbname=mydb;charset=utf8mb4';
  • 别依赖默认端口:即使你确定是 3306,也建议显式写出,避免部署环境差异(如 docker 容器映射端口不同)
  • options 防止字符错乱:new PDO($dsn, $user, $pass, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"])

云服务器(阿里云腾讯云等)连不上?重点查安全组和数据库白名单

云平台默认关闭所有入方向端口,MySQL 的 3306 不在例外列表里。光改 MySQL 配置和用户权限还不够。

立即学习PHP免费学习笔记(深入)”;

  • 阿里云:进 ECS 实例的「安全组」→「配置规则」→ 添加入方向规则,协议类型选 MySQL 或自定义 TCP,端口填 3306,源 IP 填你的办公 IP 或 0.0.0.0/0(仅测试用)
  • 腾讯云:CVM →「安全组」→「入站规则」→ 新增,目标端口 3306,来源 IP 设置同上
  • 部分云数据库(如阿里云 RDS)还单独有「白名单」功能,必须把你的出口 IP 加进去,否则即使安全组放行也连不上

远程数据库连接本质是网络 + 权限 + 配置三者对齐,PHP 层只是最后一环。最容易忽略的是:MySQL 用户授权里的 @'%' 不等于“允许所有 IP”,它只代表不限制主机名,但前提是网络层已通、防火墙已放行、安全组已配好。

text=ZqhQzanResources