You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:PHP连接MariaDB数据库出现SQLSTATE[HY000] [2002] Connection refused错误(端口3306正确)

排查MariaDB连接错误:SQLSTATE[HY000] [2002] Connection refused

我来帮你一步步排查这个连接拒绝的问题,这种情况通常是服务状态、配置设置、用户权限或者网络层面的问题,咱们逐个来检查:

1. 确认MariaDB服务是否正常运行

首先要确保树莓派上的MariaDB服务已经启动并在运行。登录到你的树莓派,执行以下命令查看状态:

sudo systemctl status mariadb

如果输出里看不到active (running),那就启动服务:

sudo systemctl start mariadb

为了避免下次重启后服务不自动启动,可以设置开机自启:

sudo systemctl enable mariadb

2. 检查MariaDB的监听地址配置

默认情况下,MariaDB可能只允许本地(127.0.0.1)连接。如果你的Web服务器和MariaDB不在同一台机器,或者即使在同一台但主机名解析有问题,就会导致连接拒绝:

  • 找到MariaDB的配置文件(通常是/etc/mysql/mariadb.conf.d/50-server.cnf或者/etc/my.cnf)
  • 找到bind-address这一行,把它改成bind-address = 0.0.0.0(允许所有IP访问),或者指定Web服务器的IP地址
  • 修改后重启MariaDB服务:sudo systemctl restart mariadb

另外,你可以尝试把PHP代码里的host=raspberrypi换成树莓派的实际IP地址(比如192.168.1.100),避免主机名解析失败的问题:

$pdo = new PDO("mysql:host=192.168.1.100;port=3306;database=$database", $username, $password);

3. 验证数据库用户的访问权限

你使用的是root用户,默认情况下root可能只允许从localhost登录。需要确认这个用户是否允许从Web服务器所在的IP访问数据库:

  1. 登录到树莓派的MariaDB:
mysql -u root -p
  1. 执行以下命令查看用户的权限范围:
SELECT user, host FROM mysql.user;
  1. 如果root对应的host是localhost或者127.0.0.1,而你的Web服务器在其他机器,就需要给root授权允许远程访问:
GRANT ALL PRIVILEGES ON weatherbot.* TO 'root'@'你的Web服务器IP' IDENTIFIED BY 'M1lVhPuio';
FLUSH PRIVILEGES;

如果你希望root能从任何IP访问,可以把你的Web服务器IP换成%。

4. 检查防火墙是否阻止了3306端口

树莓派的防火墙(比如ufw)可能会阻止外部对3306端口的访问:

  • 查看防火墙状态:
sudo ufw status
  • 如果没有允许3306端口的规则,添加允许规则:
# 允许所有IP访问3306端口(适合测试,生产环境建议限制IP)
sudo ufw allow 3306
# 或者只允许Web服务器的IP访问
sudo ufw allow from 你的Web服务器IP to any port 3306

5. 测试网络连通性

最后,从Web服务器所在的机器测试和树莓派的网络连通:

  • 先ping树莓派的IP,确认网络可达:
ping 192.168.1.100
  • 再用telnet测试3306端口是否能连接:
telnet 192.168.1.100 3306

如果telnet连接失败,说明网络层面有问题,需要先解决网络连通性(比如检查路由器设置、IP是否在同一网段等)。

内容的提问来源于stack exchange,提问作者Marie03

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:44:10