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

使用CGI脚本连接MySQL数据库时遭遇权限错误求助

解决Apache CGI脚本无法连接本地MySQL的权限问题

针对你遇到的mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'localhost:3306' (13 Permission denied)错误,以下是直接的排查和解决方法:

1. 检查SELinux限制(最常见原因)

多数Linux发行版默认启用SELinux,它会阻止Apache进程访问本地数据库端口:

  • 先临时关闭SELinux测试是否解决问题:
    setenforce 0
    
    重新运行CGI脚本,若能成功连接,说明是SELinux的限制导致。
  • 永久允许Apache访问数据库:
    setsebool -P httpd_can_network_connect_db on
    

2. 验证MySQL用户的本地连接权限

你提到外部能访问数据库,但CGI脚本用localhost连接,需确保MySQL用户允许从本地(localhost/127.0.0.1)登录:

  • 登录MySQL服务器,执行命令查看用户权限:
    SELECT user, host FROM mysql.user WHERE user='xxxx';
    
  • 若结果中没有localhost或127.0.0.1的条目,创建并授权本地用户:
    CREATE USER 'xxxx'@'localhost' IDENTIFIED BY 'your_password';
    GRANT ALL PRIVILEGES ON DID_MASTER.* TO 'xxxx'@'localhost';
    FLUSH PRIVILEGES;
    
    注意替换your_password为实际密码。

3. 检查Apache进程的网络访问权限

确保Apache运行的用户(通常是apache或httpd)未被系统安全工具限制访问本地3306端口:

  • 查看防火墙规则,确认允许本地进程访问3306:
    firewall-cmd --list-all
    
  • 若需要,添加本地访问规则:
    firewall-cmd --add-port=3306/tcp --zone=trusted --permanent
    firewall-cmd --reload
    

4. 确认MySQL监听本地端口

检查MySQL是否在localhost(127.0.0.1)上监听:

netstat -tlnp | grep 3306

若输出中未包含127.0.0.1,修改my.cnf或my.ini中的bind-address为127.0.0.1或0.0.0.0,然后重启MySQL服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:40:23