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

AWS部署代码时遇SQLSTATE[HY000][2002]权限拒绝错误求助

解决SQLSTATE[HY000] [2002] Permission denied问题

1. 排查AppArmor限制(Ubuntu默认启用)

Ubuntu 24.04默认用AppArmor做进程权限管控,可能阻止应用程序访问MySQL连接:

  • 查看AppArmor状态:sudo aa-status
  • 临时解除MySQL的AppArmor强制规则测试:sudo aa-complain /etc/apparmor.d/usr.sbin.mysqld
  • 若测试后问题解决,修改AppArmor规则允许应用进程访问:
    编辑/etc/apparmor.d/usr.sbin.mysqld,添加应用运行目录或二进制路径,例如:
    /var/www/your-app/** rw,
    
    重新加载规则:sudo systemctl reload apparmor

2. 核对应用数据库连接配置

大概率是配置误用本地socket而非TCP远程连接:

  • 检查应用配置文件(如Laravel的.env、Django的settings.py),确认数据库主机为数据库服务器的私有IP/公网IP,而非localhost或127.0.0.1(这两个会调用本地socket,应用服务器无MySQL服务)。
  • 示例正确配置(Laravel为例):
    DB_HOST=10.0.0.10  # 数据库服务器私有IP
    DB_PORT=3306
    DB_DATABASE=your_db_name
    DB_USERNAME=your_db_user
    DB_PASSWORD=your_db_pass
    

3. 确认MySQL的bind-address设置

确保MySQL允许远程IP连接:

  • 编辑MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,修改bind-address为0.0.0.0(允许所有IP)或应用服务器的私有IP:
    bind-address = 0.0.0.0
    
  • 重启MySQL服务:sudo systemctl restart mysql

4. 检查应用服务器本地防火墙

除AWS安全组外,应用服务器的ufw可能限制出站连接:

  • 查看ufw状态:sudo ufw status
  • 若3306端口出站被阻,添加规则:sudo ufw allow out 3306/tcp

5. 验证MySQL用户的主机授权范围

确认授权用户的主机匹配应用服务器IP:

  • 在MySQL服务器执行:SELECT user, host FROM mysql.user WHERE user='your_db_user';
  • 确保host为%(允许所有IP)或应用服务器的具体IP,而非localhost。
  • 若范围错误,重新授权:GRANT ALL PRIVILEGES ON your_db_name.* TO 'your_db_user'@'%' IDENTIFIED BY 'your_db_pass'; FLUSH PRIVILEGES;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:33:14