我目前正在使用python 3.7,Django 2.1,Mysql作为数据库开发项目。
我正在将其部署在Google Cloud App Engine标准环境中,对于数据库,我正在使用Cloud SQL-MySql第二代实例。
该应用程序运行良好,但是当我分析日志时看到以下错误:
“连接中断-读取通信数据包时出错”
在这种情况下,连接被我的应用程序(django)关闭。如果我将我的应用程序配置为具有持久连接,并且在cloud sql的配置中放置了wait_timeout(即60),则错误为:
“连接中断-读取通信数据包超时”。
我刚刚确定这不是sql cloud或应用程序配置问题,而是应用程序引擎问题。我通过以下方式得出这个结论:
所以我的结论是,这是应用程序引擎如何连接到云sql实例的问题。
为什么会这样?怎么解决?
答案 0 :(得分:0)
我认为这是因为App Engine应用程序对Cloud SQL的请求受以下时间和连接limits的约束:
答案 1 :(得分:0)
您看到的“中止连接”消息通常是在连接关闭不当或服务器与客户端之间存在网络异常时触发的。
有时Cloud SQL实例和GAE具有长期空闲的连接。为了解决此问题,建议您在600秒以下设置“ wait_timeout”标记-您已经尝试过这样做。
另一种可能的解决方案是实现应用程序级的keepalive。 SQLAlchemy为此提供了“ pre-ping”。否则,通过发送简单的SQL语句(例如“ SELECT 1;”)在所有打开的连接上生成活动。定期,至少每5分钟一次。还可以考虑在代码中使用“ with db.connect() as conn:”之类的语句来控制连接的生存期。