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

Apache服务器中Flask应用远程调用MySQL连接失败求助

解决远程调用Flask接口无法连接MySQL的问题

针对你遇到的Database error: 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (13)错误,以下是具体排查和解决步骤:

核心原因分析

错误码13表示权限被拒绝,并非MySQL服务未启动或端口不可达——你在服务器本地运行代码能正常连接,说明MySQL本身没问题,问题出在Apache/Flask运行的进程没有访问MySQL的权限(Alma Linux默认开启SELinux,这是最常见的诱因)。


1. 临时关闭SELinux验证问题

先确认是否是SELinux限制:

# 查看SELinux状态
sestatus
# 如果输出为Enforcing,临时关闭
setenforce 0

关闭后再次远程调用/db_test接口,如果能正常连接,说明就是SELinux的问题,继续下一步永久配置。

2. 永久允许Apache连接数据库

执行以下命令开启Apache连接数据库的SELinux规则(-P参数确保重启后依然生效):

setsebool -P httpd_can_network_connect_db on

3. 验证数据库用户的连接权限

确保你的数据库用户允许从localhost(或socket)连接:

  1. 登录MySQL:
mysql -u root -p
  1. 查询用户权限:
SELECT user, host FROM mysql.user;

如果你的应用使用的数据库用户host字段不是localhost或%,需要修改权限:

GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;

4. 检查MySQL Socket文件权限(可选)

如果你的Flask应用通过Unix Socket而非TCP连接MySQL,需确保Apache进程能访问socket文件:

  1. 查看MySQL配置中的socket路径(通常在/etc/my.cnf或/etc/mysql/my.cnf):
[mysqld]
socket = /var/lib/mysql/mysql.sock
  1. 检查socket文件权限:
ls -l /var/lib/mysql/mysql.sock
  1. 如果权限不足,可调整SELinux上下文:
chcon -t httpd_var_run_t /var/lib/mysql/mysql.sock

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:25:02