本地Django 5.1项目连接Cloud SQL MySQL 8.0.31时遇连接丢失错误求助
本地Django 5.1项目连接Cloud SQL(MySQL 8.0.31)实例时,执行任何python manage.py相关命令(如inspectdb、runserver、showmigrations)均报错:
django.db.utils.OperationalError: (2013, 'Lost connection to server during query')
已确认MySQLWorkbench 8.0.22及本地mysql.connector库可正常连接该数据库,且虚拟环境内包版本符合Django 5.1与MySQL 8.0.31的兼容要求。
核对数据库引擎与驱动配置
Django 5.1官方推荐使用mysqlclient(版本≥2.0.3)作为MySQL驱动,确保settings.py中DATABASES的ENGINE为django.db.backends.mysql;若使用mysql-connector-python(版本≥8.0.13),则ENGINE需设置为mysql.connector.django。
示例配置(基于mysqlclient):DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名', 'USER': 'root', 'PASSWORD': '你的密码', 'HOST': 'Cloud SQL公网IP', 'PORT': '3306', } }添加连接超时与SSL配置
Cloud SQL可能要求SSL加密连接,或存在连接超时限制。在DATABASES的OPTIONS中补充相关参数(需提前下载Cloud SQL的CA证书):DATABASES = { 'default': { # 原有配置... 'OPTIONS': { 'connect_timeout': 10, 'ssl': { 'ca': '/本地路径/server-ca.pem' } } } }关闭持久连接
若设置了CONN_MAX_AGE参数,闲置连接可能被Cloud SQL主动断开。尝试将其设为0,让Django每次请求结束后关闭连接:DATABASES = { 'default': { # 原有配置... 'CONN_MAX_AGE': 0, } }排查虚拟环境网络代理
确认虚拟环境未启用代理,或代理已配置为可访问Cloud SQL的公网IP——部分虚拟环境自带的代理设置可能导致连接路径与MySQLWorkbench不一致。调整Cloud SQL超时参数
登录Cloud SQL控制台,查看wait_timeout和interactive_timeout配置,若值过小(如默认的8小时),可适当调大(如设为28800秒),避免短时间内连接被强制断开。
内容的提问来源于stack exchange,提问作者brycecube

