我在Cloud SQL的日志中报告了许多错误,例如在连接到Cloud SQL MySQL第二代的GAE Standard Python3应用程序中出现了以下错误:
textPayload: "2019-02-19 485 [Note] Aborted connection 485 to db: 'my_database' user: 'root' host: 'cloudsqlproxy~74.125.xx.xxx' (Got an error reading communication packets)"
GAE Python3甚至在后台使用Cloud SQL代理吗?如何避免这些问题?
答案 0 :(得分:3)
是的,GAE Standard使用Cloud SQL代理与Cloud SQL实例进行通信(如果您使用实例名称进行访问,但是如果通过公共IP访问则不需要)。此外,错误消息可能不是问题。
“与db的连接xxx中止:'db_name'用户:'sql_user'主机: 'ip_address'“
终止现有连接时触发此消息 看起来不正确,但实际上是完全正常的。中止连接的发生是由于连接不干净的关闭(例如实例缩小规模并被终止)或服务器与客户端之间的网络问题,而不是服务器所致。
如果长期使用的空闲连接对于您的用例来说很常见,则这可能会影响从GCE或GAE连接时的SQL实例。要纠正:
将wait_timeout
标志值设置为低于600秒:
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_wait_timeout
实现应用程序级别的保持活动:许多连接池框架为此提供了一个简单的配置选项。否则,通过发送简单的SQL语句(例如“ SELECT 1;”)在所有打开的连接上生成活动。定期,至少每5分钟一次。