gpt4 book ai didi

mysql - 来自 GCE 实例的 CloudSQL ERROR 2013

转载 作者:行者123 更新时间:2023-11-29 12:04:56 43 4
gpt4 key购买 nike

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

mysql -udbase -p -DmyDb -hmyIp

一旦它开始运行,我就会通过检查进程列表来监视另一个 shell 中的 SQL 命令。我看到了 SQL、processId 以及执行所花费的时间。

在最后一次测试之后,processId 在 1172 秒后从“查询”更改为“ sleep ”。

但是,mysql命令没有收到响应,它只是停留在那里,好像仍在等待来自CloudSql的响应。

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

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

第 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,客户端不应该更早地给出错误吗?

感谢您的帮助。

最佳答案

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

关于mysql - 来自 GCE 实例的 CloudSQL ERROR 2013,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31666359/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com