web-dev-qa-db-ja.com

MySQL Workbenchはアイドル時に接続をドロップします

OS X 10.9.5でMySQL Workbench 6.3を使用して複数のクラウドデータベース(Rackspaceでホストされている)を管理していると、次の問題が発生します。

5分間非アクティブにすると、次の問題が発生します。

  • クエリを実行できません(エラー2013:クエリ中にMySQLサーバーへの接続が失われました)
  • データベースのテーブルを参照しようとすると、「テーブルを取得できませんでした」、「ビューを取得できませんでした」などのメッセージが表示されます。
  • 左パネルを更新すると、「エラーコード:2006 MySQLサーバーがなくなりました」というメッセージが表示されます。

したがって、基本的に接続は失われます。

これは、わずか5分間の非アクティブ後に発生するため、非常に迷惑です。そのため、毎回接続を閉じて再度開く必要があります。

私もこれを試しました: MySQL Workbench:接続を維持する方法 、何も変更しませんでした。 [ワークベンチ設定]タブには、次の設定があります。

  • DBMS接続のキープアライブ間隔(秒):600
  • DBMS接続読み取りタイムアウト(秒):600
  • DBMS接続タイムアウト(秒):60

この問題が発生することに注意してください5分間非アクティブになった後! 4'59分間隔で2つのクエリを実行すると、完全に機能します。また、ワークベンチ上の同じデータベースに接続する同僚にはこの問題はありません。

誰かがこれに対する解決策を持っていますか?

32
Michel Y

[編集]-> [設定]-> [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接続のキープアライブ間隔を300未満に設定します(例:250)

「250秒ごとにキープアライブ要求を送信する」という意味です。 OKをクリックします。

次に、MySQL Workbenchを終了して再起動し、変更を有効にします。

SSH経由の標準TCP/IP接続方法を使用する場合は、ssh ServerAliveIntervalも構成すると役立つ場合があります。

25
Kosh Very

このバグは、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

15
lepix

FWIW:Koshの推奨に従い、設定を次のように変更しました。Ubuntu16で実行されている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

やり過ぎかもしれませんが、動作します。

2
Max

Windows AzureでホストされているUbuntu 14.04でtcp_keepalive_timeを120秒に設定することで解決しました

AzureロードバランサーのTCPキープアライブはデフォルトで240秒です。このため、AzureシステムのキープアライブがTCPこの値よりも大きいtcp_keepalive_timeを120に設定して、この問題を改善する必要があります。

  1. Tcp_keepalive_time を確認するには

    cat/proc/sys/net/ipv4/tcp_keepalive_time

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

120

4. sysctlファイルの値を、再起動後も値を維持するように設定します。

vi /etc/sysctl.conf

I(ファイルに挿入するには)net.ipv4.tcp_keepalive_time = 120(ファイルの最後にこの行を追加):wq(保存して終了)を押します。

1
Srikanth P

これは私を何ヶ月も精神的に動かしていました。私の接続はHostgatorサーバーへでした。接続し、接続後わずか10秒程度でテーブルを編集できます。その後、テーブルコミットを実行すると、「読み取りできません」というメッセージが表示され、テーブルが「読み取り専用」に変わります。一意の行識別子(MySQLサーバーがなくなった)または "(クエリ中にMySQLサーバーへの接続が失われた)を特定します。

ソリューションは、ここでの他の提案に従って、キープアライブ設定を削減することでした。私の場合、それは10秒にまで下がらなければなりませんでした(明らかに、帯域幅がかなり悪くなっている場合はHostgatorです!)

最初にSSH KeepAlivePreferences/Others/Timeoutsの下)を削減しようとしましたが、これは機能しませんでした。

トリックはDBMS connection keep-alive intervalを減らすことでした(Preferences/SQL Editor/MySQL Sessionの下)。接続が安定した状態になるまで、10秒までずっとそれを取らなければなりませんでした。ホストは異なる場合があります。

最後に、「すべてリフレッシュ」をせずに、待って、何かをして、すすいで繰り返します。

0
SteveCinq

Kosh Very's Answerは私にはうまくいきませんでしたので、これに対して別の解決策を見つけました:

my.iniファイルのmax_allowed_pa​​cketを変更します。 (C:\ ProgramData\MySQL\MySQL Server 5.6)

max_allowed_pa​​cket = 16M

完了したら、MySQLサービスを再起動します。

0
JerryGoyal

Kosh Veryが正しい答えです。それを機能させることができなかった人のために、別の解決策があります:

巨大なテーブルを変更する必要がある場合(列のドロップまたは追加など)、ターミナルでクエリを実行します。

  1. 接続mysql -u myusername -p

  2. パスワードを求められます

  3. 実行必要な長時間かかるクエリ。注:ターミナルでクエリを作成するには、それぞれに終了セミコロン(;)が必要です。例:ALTER TABLE mydb.mytable DROP COLUMN mycol;
0
evilReiko