【问题标题】:CloudSQL ERROR 2013 from GCE instance来自 GCE 实例的 CloudSQL ERROR 2013
【发布时间】:2015-07-29 00:36:58
【问题描述】:

在 GCE 实例中,我正在从命令行执行以下操作

mysql -udbase -p -DmyDb -hmyIp

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

在最后一次测试之后,processId 在 1172 秒后从 Query 变为休眠。

然而,mysql命令并没有收到响应,它只是停留在那里,好像还在等待来自CloudSql的一些响应。

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

经过很长一段时间(30 到 60 分钟之间),我终于得到:

ERROR 2013 (HY000) at line 1: 在查询期间丢失与 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,客户端不应该更早地给出错误吗?

感谢您的帮助。

【问题讨论】:

    标签: mysql google-compute-engine google-cloud-sql


    【解决方案1】:

    TCP Keepalive 需要少于 10 分钟,以使 GCE 防火墙不会忘记连接。让它变大会破坏这个目的。我建议尝试Connecting to Google Cloud SQL from Google Compute Engine 的说明:

    # Display the current tcp_keepalive_time value.
    $ cat /proc/sys/net/ipv4/tcp_keepalive_time
    
    # Set tcp_keepalive_time to 60 seconds and make it permanent across reboots.
    $ echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf
    
    # Apply the change.
    $ sudo /sbin/sysctl --load=/etc/sysctl.conf
    
    # Display the tcp_keepalive_time value to verify the change was applied.
    $ cat /proc/sys/net/ipv4/tcp_keepalive_time
    

    【讨论】:

    • 您好,感谢您的回复,但没有任何变化。 marcelo@node:~$ cat /proc/sys/net/ipv4/tcp_keepalive_time 60 然后 marcelo@node:~$ mysql -u -p -Dmydb -hmyIp mysql> SELECT account, count(account) -> FROM headers` -> where labelIds='["SENT"]' -> 按帐户顺序分组 2;` 然后它就挂在那里了。
    • 但至少现在“ERROR 2013 (HY000): Lost connection to MySQL server during query”消息出现得更快......
    • 我错过了故障排除文章cloud.google.com/compute/docs/…修复所有设置修复它
    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    相关资源
    最近更新 更多