在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
相关产品推荐
相关产品推荐

