使用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测试是否解决问题:
重新运行CGI脚本,若能成功连接,说明是SELinux的限制导致。setenforce 0 - 永久允许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
相关产品推荐
相关产品推荐

