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

在AWS私有EC2与私有RDS部署Flask博客遇数据库错误求助

Flask微博客部署AWS RDS时数据库不存在错误的排查方案

环境概述

  • 架构配置:
    • 公有子网堡垒机(带公网IP,仅允许指定IP通过SSH(22)访问)
    • 私有子网EC2实例(无公网IP,仅允许堡垒机SSH(22)访问,允许RDS的MySQL/Aurora(3306)端口)
    • 私有子网RDS MySQL实例(无公网访问,仅允许私有EC2通过MySQL/Aurora(3306)端口访问)
    • 私有EC2挂载EFS(仅允许私有EC2通过NFS(2049)端口访问)
  • 已完成操作:通过堡垒机登录私有EC2,安装应用依赖,创建包含RDS访问信息的.env文件(DATABASE_URL=mysql+pymysql://db-user:db-password@db-host:db-port/db-final-database),执行flask db upgrade时触发错误。

核心错误信息

执行flask db upgrade时返回关键错误:

pymysql.err.OperationalError: (1049, "Unknown database 'db-final-database'")

使用nc测试连通性结果:

$ nc -vz db-final-database.csfitfdo13cc.us-east-1.rds.amazonaws.com 3306
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.0.68:3306.
Ncat: 0 bytes sent, 0 bytes received in 0.04 seconds.

问题排查与解决步骤

1. 手动创建目标数据库

Flask-Migrate的db upgrade不会自动创建数据库,仅会在已存在的数据库中执行迁移脚本。需先手动创建db-final-database:

  • 从私有EC2连接RDS:
    mysql -u db-user -p -h db-host -P db-port
    
  • 输入密码后执行创建命令:
    CREATE DATABASE `db-final-database`;
    
  • 验证数据库是否存在:
    SHOW DATABASES;
    

2. 核对数据库连接参数

确认.env文件中的参数与RDS实例实际信息一致:

  • RDS端点(Endpoint)可在AWS控制台的RDS实例详情页查看
  • 确认端口为RDS实例的实际端口(默认3306,或自定义端口)
  • 确保db-user拥有目标数据库的访问权限,可通过SQL命令授权:
    GRANT ALL PRIVILEGES ON `db-final-database`.* TO 'db-user'@'%';
    FLUSH PRIVILEGES;
    

3. 深度验证MySQL连接

通过mysql命令直接测试数据库连接,确认网络与认证正常:

mysql -u db-user -p -h db-host -P db-port db-final-database

若能成功登录,说明网络和权限无问题;若失败,根据返回的错误信息(如密码错误、权限不足)针对性排查。

4. 确认.env文件加载正常

确保Flask应用正确读取.env文件:

  • 检查是否安装python-dotenv依赖:
    pip install python-dotenv
    
  • 确认应用入口文件(如app.py或__init__.py)中包含加载代码:
    from dotenv import load_dotenv
    load_dotenv()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:02:03