MySQL Workbench在空闲时丢弃连接

时间:2015-08-04 14:05:36

标签: mysql database timeout mysql-workbench connection-timeout

我在OS X 10.9.5上使用MySQL Workbench 6.3管理多个云数据库(托管在Rackspace上),我遇到以下问题:

当不活动5分钟时,会发生以下问题:

  • 我无法运行任何查询(错误2013:查询期间丢失与MySQL服务器的连接)
  • 在尝试浏览我的数据库中的表时,我收到的信息类似于&#34;无法获取表格&#34;,&#34;无法获取视图&#34;等等< / LI>
  • 刷新左侧面板时,我得到一个&#34;错误代码:2006 MySQL服务器已经消失&#34;

所以基本上连接已经消失了。

这真的很烦人,因为它只在5分钟不活动后发生。因此,我需要关闭连接并每次重新打开它。

我也试过这个:MySQL Workbench: How to keep the connection alive,它没有改变任何东西。 在我的Workbench Preferences选项卡中,我有以下设置:

  • DBMS连接保持活动间隔(以秒为单位):600
  • DBMS连接读取超时(以秒为单位):600
  • DBMS连接超时(以秒为单位):60

请注意,此问题在5分钟不活动后正好发生如果我在4分钟59分钟的时间间隔内运行两个查询,则效果非常好。 我的同事在他们的Workbench上连接到同一个数据库也没有这个问题。

有人有解决方案吗?

7 个答案:

答案 0 :(得分:24)

转到编辑 - &gt;偏好 - &gt; SQL编辑器,您将看到:

DBMS connection keep-alive interval (in seconds): 600
DBMS connection read time out (in seconds): 600
DBMS connection time out (in seconds): 60

DBMS连接保持活动时间间隔表示Workbench向服务器发送保持活动请求以保持连接活动的频率。

5分钟== 300秒, 设置DBMS连接保持活动间隔&lt; 300(例如250)

这意味着&#34;每250秒发送一次保持活动请求&#34;单击“确定”。

然后退出MySQL Workbench并重新启动它以使更改生效。

如果您使用标准TCP / IP over SSH连接方法,它也可以帮助配置ssh ServerAliveInterval。

答案 1 :(得分:14)

在6.0以上的MySQL Workbench版本中存在此错误(此时:6.1,6.2和6.3有错误)。

降级到MySQL Workbench 6.0.x似乎是解决此问题的唯一方法。

下载MySQL Workbench 6.0.x:http://dev.mysql.com/downloads/workbench/6.0.html

答案 2 :(得分:2)

FWIW:按照Kosh的建议,我更改了如下设置,似乎已经消除了在Ubuntu 16上运行的WB 6.3的问题:

DBMS connection keep-alive interval (in seconds): 60
DBMS connection read time out (in seconds): 60
DBMS connection time out (in seconds): 30

这可能有点矫枉过正,但它确实有效。

答案 3 :(得分:1)

它通过在Windows Azure上托管的Ubuntu 14.04上将tcp_keepalive_time设置为120秒来解决我的问题

默认情况下,Azure负载均衡器上的TCP keepalive为240秒,如果Azure系统上的TCP keepalive大于此值,则可能导致其静默删除连接。您应该将tcp_keepalive_time设置为120以改善此问题。

  1. 检查tcp_keepalive_time

    cat / proc / sys / net / ipv4 / tcp_keepalive_time

  2. 7200(默认为2小时)

    2.设定值从2小时到120秒。

    sudo sysctl -w net.ipv4.tcp_keepalive_time = 120

    net.ipv4.tcp_keepalive_time = 120

    1. 更改后重新检查值。

      cat / proc / sys / net / ipv4 / tcp_keepalive_time

    2. 120

      4.设置sysctl文件中的值,即使重启后也保持该值。

      vi /etc/sysctl.conf

      按i(插入文件) net.ipv4.tcp_keepalive_time = 120(在文件底部添加此行) :wq(保存并退出)

答案 4 :(得分:0)

Kosh Very's Answer对我不起作用所以我找到了另一种解决方案:

  

更改my.ini文件中的max_allowed_pa​​cket。 (C:\ ProgramData \ MySQL \ MySQL Server 5.6)

     

max_allowed_pa​​cket的= 16M

     

现在完成后重启MySQL服务。

答案 5 :(得分:0)

Kosh非常是正确的答案。对于那些无法让它工作的人来说,这是另一个解决方案:

我需要更改一个巨大的表(删除或添加列等),是通过终端运行查询:

  1. 连接mysql -u myusername -p

  2. 您将被要求输入密码

  3. 运行您需要的长时间查询。注意:在终端中编写查询需要每个都有一个结尾分号(;)。示例:ALTER TABLE mydb.mytable DROP COLUMN mycol;

答案 6 :(得分:0)

这让我精神振作了好几个月。我的连接是Hostgator服务器。我连接后可以在连接后编辑表格大约10秒左右,然后我会做一个表格提交,表格会改为&#34; Read Only&#34;使用鼠标悬停消息,&#34;无法确定唯一的行标识符(MySQL服务器已消失)或&#34;(在查询期间丢失与MySQL服务器的连接)。

根据其他建议,解决方案是减少保持活动设置。在我的情况下,它必须降到10秒(显然,Hostgator如果相当吝啬他们的带宽!)

首先我尝试减少SSH KeepAlive(在首选项/其他/超时下),但这不起作用。

诀窍是减少DBMS connection keep-alive interval(在首选项/ SQL编辑器/ MySQL会话下)。我不得不把它一直降到10秒,直到连接保持稳定。你的主人可能会有所不同。

最后,不再需要“全部刷新”,等待,做点什么,冲洗并重复。