我在星期天在一个新的GCE实例上设置了一个旧的Django应用程序,并将其指向一个带有导入数据的新CloudSQL实例。这些代码和数据在过去几年中成功运行在各种专用主机设置上,在EC2和EC2 + RDS上。
自周日以来,我一直有2013年的间歇性报告,"在读取初始通信数据包时失去与MySQL服务器的连接,系统错误:0"从应用程序。特别是今天它发生了两次连发3次,相隔约7个小时。
我在之前的停机中惊慌失措,重新启动了应用程序和CloudSQL实例。然而,后者在几分钟后自行改正。
我在使用MySQL之前从未遇到过这个错误,任何对错误的搜索都会给那些对数据库有一般访问问题的人提供相关结果。
在GCE方面,我从之前的设置中可以想到的唯一区别是它使用的是谷歌开箱即用的Debian图像而不是Ubuntu 12.04。在MySQL方面,我不知道因为我已经在MySQL 5.x和MariaDB上成功运行了这个。
有没有办法弄清楚为什么会发生这种情况并修复它?
感谢。
答案 0 :(得分:1)
您是否尝试更改TCP连接的保持活动设置? GCE有一个防火墙规则,可以在10分钟后丢弃空闲的TCP连接:
https://cloud.google.com/compute/docs/troubleshooting#communicatewithinternet
您可以查看'tcp_keepalive_time'的当前值:
cat /proc/sys/net/ipv4/tcp_keepalive_time
并将其更改为60秒:
vi /etc/sysctl.conf
# Add this line
net.ipv4.tcp_keepalive_time = 60
# Reload Sysctl interface
sudo /sbin/sysctl --load=/etc/sysctl.conf
您可能需要重新启动Django服务器以选择新的保持活动设置。
注意:如果此问题仅限于昨天(2014年11月18日)并且您的Cloud SQL实例位于欧盟,则您可能受此影响:
https://groups.google.com/forum/#!topic/google-cloud-sql-announce/k5raPT48hc0
答案 1 :(得分:0)
防火墙似乎存在问题,阻止传入连接,只是将服务器的位置更改为另一个镜像,假设可以正常运行。它对我有用