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

EC2实例及托管SQL崩溃:Django部署后MySQL连接异常求助

解决EC2上Django连接MySQL失败及实例崩溃问题

一、先修复MySQL连接拒绝问题

1. 确认MySQL服务状态

登录EC2实例,执行命令检查MySQL/MariaDB运行状态:

systemctl status mysql
# 若为MariaDB则执行:systemctl status mariadb

如果服务未运行,启动并设置开机自启:

systemctl start mysql
systemctl enable mysql

2. 验证MySQL监听配置

检查MySQL是否监听127.0.0.1的3306端口:

netstat -tulpn | grep 3306

若输出为空或监听地址不符,编辑MySQL配置文件(通常为/etc/mysql/my.cnf或/etc/mysql/mariadb.conf.d/50-server.cnf),修改bind-address项:

bind-address = 127.0.0.1

修改后重启服务:

systemctl restart mysql

3. 检查Django数据库配置

打开项目settings.py,确认DATABASES配置参数正确:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '你的数据库名称',
        'USER': '数据库用户名',
        'PASSWORD': '数据库密码',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

手动测试数据库连接,验证账号密码有效性:

mysql -u 数据库用户名 -p -h 127.0.0.1

能正常进入MySQL命令行则说明连接参数无问题。

4. 修复MySQL用户权限

若手动连接失败,可能是用户缺少127.0.0.1的访问权限。进入MySQL命令行后执行:

GRANT ALL PRIVILEGES ON 你的数据库名.* TO '数据库用户名'@'127.0.0.1' IDENTIFIED BY '数据库密码';
FLUSH PRIVILEGES;

二、解决EC2实例崩溃问题

连接失败后实例崩溃,多因连接重试导致资源耗尽:

1. 优化Django数据库连接池

在settings.py的DATABASES中添加连接控制配置:

DATABASES = {
    'default': {
        # 原有配置...
        'CONN_MAX_AGE': 60,  # 连接闲置60秒后关闭
        'OPTIONS': {
            'max_connections': 10,  # 限制最大连接数,根据实例资源调整
        }
    }
}

也可使用第三方连接池库(如django-db-connection-pool)实现更精细的连接管理。

2. 检查实例资源占用

执行命令查看CPU、内存使用情况:

top

若连接失败时资源被占满,需升级EC2实例规格,或调整Web服务器(如Gunicorn)的worker数量,避免进程过度抢占资源。

三、修复迁移文件问题

删除迁移文件后需重新同步模型与数据库结构:

  1. 确认数据库已清空(或与当前模型结构一致),执行:
python manage.py makemigrations
python manage.py migrate
  1. 后续不要直接删除迁移文件,如需重置迁移,使用python manage.py migrate --fake或官方推荐流程,避免模型与数据库结构不一致引发异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:26:11