树莓派Web服务器无法连接外部MySQL数据库问题求助
针对树莓派上PHP无法连接外部数据库的排查方案
以下是几个针对性的排查方向和解决步骤:
先确认网络连通性
在树莓派终端执行telnet 外部数据库IP 3306或者nc -zv 外部数据库IP 3306,测试是否能连通数据库端口。如果不通:- 检查外部数据库的防火墙/安全组,确认是否允许树莓派的公网/内网IP访问3306端口;
- 检查树莓派所在网络的路由规则,是否有端口转发限制;
- 查看树莓派本地防火墙(如ufw),执行
sudo ufw status确认是否禁止了3306端口的出站请求,若有则执行sudo ufw allow out 3306/tcp开放。
检查PHP mysqli扩展状态
执行php -m | grep mysqli,如果没有输出意味着未安装扩展,执行sudo apt install php-mysqli安装,随后重启Web服务(如Apache:sudo systemctl restart apache2)。
也可以通过phpinfo()查看PHP配置,对比Mac上的mysqli相关参数,确认是否存在配置差异(如连接超时时间设置过短)。修复异常捕获逻辑
mysqli默认不会抛出异常,所以直接用try/catch无法捕获错误。需要先开启异常模式,再进行连接:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); try { $conn = mysqli_connect($host, $user, $pw, $database); } catch (mysqli_sql_exception $e) { echo "连接错误:" . $e->getMessage(); exit; }这样就能输出具体错误信息,定位问题根源。
排查DNS解析问题
如果连接时使用的是域名而非IP,尝试替换为数据库的直接IP地址。同时在树莓派终端执行nslookup 数据库域名,确认解析结果是否正确,若异常则修改树莓派的DNS服务器配置。确认数据库账号权限
登录外部树莓派的数据库,执行SELECT user, host FROM mysql.user;,查看目标账号的host字段是否允许树莓派的IP访问(或设为%允许任意IP)。若权限不足,执行授权命令:GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'树莓派IP' IDENTIFIED BY '密码'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者n1klas
相关产品推荐
相关产品推荐

