从GCE实例的CloudSQL错误2013年

从一个GCE实例,我从命令行执行以下内容

> mysql -udbase -p -DmyDb -hmyIp > > mysql> SELECT account, count(account) > -> FROM `headers` > -> where labelIds='["SENT"]' > -> group by account order by 2 desc limit 0,50; 

一旦运行,我通过检查进程列表来监视另一个shell中的SQL命令。 我看到了SQL,processId和执行的时间。

在最后一次testing之后,processId从Query变为1172秒后进入睡眠状态。

但是,mysql命令没有收到响应,它只是呆在那里,好像还在等待CloudSql的响应。

一两分钟后,processID从进程列表中消失,仍然有mysql命令,就好像在等待。

经过很长一段时间(超过2小时,过了一夜),我终于得到:

第1行错误2013(HY000):在查询过程中丢失与MySQL服务器的连接

这就像GCE和CloudSQL之间的连接被切断一样,只是客户端没有意识到。

根据另一篇文章的build议,我夸大了数字

sudo / sbin / sysctl -w net.ipv4.tcp_keepalive_time = 1800 net.ipv4.tcp_keepalive_intvl = 1800 net.ipv4.tcp_keepalive_probes = 50

但是,这似乎是唯一的做法是延长查询结束和客户端断开连接之间的时间。

如果应用了net_read_timeout,客户不应该提前多出错吗?

谢谢你的帮助。