Mysql

來自 GCE 實例的 CloudSQL ERROR 2013

  • July 28, 2015

從 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 和執行時間。

在最後一次測試之後,processId 在 1172 秒後從 Query 變為 sleep。

但是,mysql 命令並沒有收到響應,它只是呆在那裡,好像還在等待 CloudSql 的一些響應。

一兩分鐘後,processID從程序列表中消失了,mysql命令還在,好像在等待。

經過很長一段時間(超過2小時,過夜),我終於得到:

第 1 行的錯誤 2013 (HY000):在查詢期間失去與 MySQL 伺服器的連接

就像GCE和CloudSQL之間的連接被切斷了,只是客戶端沒有意識到。

根據另一篇文章中的建議,我誇大了

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,客戶端不應該更早地給出錯誤嗎?

謝謝你的幫助。

我錯過了故障排除文章https://cloud.google.com/compute/docs/troubleshooting#communicatewithinternet修復所有參數修復它

引用自:https://serverfault.com/questions/709077