エラーコード:2013。クエリ中にMySQLサーバーへの接続が失われました


250

エラーコード:2013を取得しました。MySQLWorkbenchを使用してテーブルにインデックスを追加しようとしたときに、クエリエラー中にMySQLサーバーへの接続が失われました。また、長いクエリを実行するたびに表示されることにも気付きました。

タイムアウト値を増やす距離はありますか?

回答:


471

MySQL WorkBenchの新しいバージョンには、特定のタイムアウトを変更するオプションがあります。

私にとっては、編集→設定→SQLエディター→DBMS接続の読み取りタイムアウト(秒):600

値を6000に変更しました。

また、データセット全体を検索するたびに制限を設定するのが面倒になるため、制限されていない制限行も表示されます。


2
この制限を99,999秒より大きくすることは可能ですか?DBMS connection read time outフィールドには、わずか5つの数字まで受け入れ、0にフィールドを設定すると、デフォルトのパラメータ(600秒)に相当します。(Windows 7 64ビットUltimate、MySQL Workbench 5.2.47 CE)
フランクダーノンコート2013年

2
続いてstackoverflow.com/q/16877574/395857、この問題は現在、(解決されbugs.mysql.com/bug.php?id=69395
フランクDernoncourt

4
Edit→Preferences→SQL Queries
Jon

7
再起動後、読み取りタイムアウトを6000に設定してもエラー2013が再び表示されるため、これは解決策ではないようです。
Davicus、2014年

4
Workbenchを再起動し、開いているすべてのクエリウィンドウを最初に閉じることを忘れないでください。
pimbrouwers 2017年

32

コマンドラインオプションnet_read_timeout/ wait_timeoutと適切な値(秒単位)を指定してDBサーバーを起動します-例:--net_read_timeout=100

参照については、ここここを参照してください。


1
これは正しいですが、実際にはupsの数が最も多い答えが
役に立ちました

6
コマンドラインでこのパラメーターを指定するにはどうすればよいですか?DBに接続しようとしているとき:mysql -u root -p --net_read_timeout = 60またはサービスを開始しようとしているとき?sudoサービスmysql start?両方の場所でエラーが発生しています:不明な変数 'net_read_timeout'
Vikas Goel

@VikasGoelサーバー側のパラメーターです。すなわちmysqld
クロエ

29

クエリにblobデータがある場合、この問題は、この回答で提案されているmy.ini変更適用することで修正できます。

[mysqld]
max_allowed_packet=16M

デフォルトでは、これは1Mです(許可される最大値は1024Mです)。指定された値が1024Kの倍数でない場合、1024Kの最も近い倍数に自動的に丸められます。

参照されているスレッドはMySQLエラー2006に関するものですがmax_allowed_packet、1Mから16Mに設定すると、長いクエリを実行したときに表示される2013エラー修正されました。

WAMPユーザーの場合:[wampmysqld]セクションにフラグがあります。


これはまさに私の問題でした。ファイルからデータベースバックアップをインポートしていて、MySQL Workbenchがこの2013エラーに続いて「操作が終了コード1で失敗しました」を報告していました。バックアップには、MySQLのデフォルトのmax_allowed_pa​​cketサイズである4Mを超える大きなblob列があったことがわかりました。これを増やすと修正されました。(MySQL 5.6およびWorkbench 6.2.3)。ありがとう!
zAlbee 2014年

これも私にとっての修正でした。Windowsマシンでは256Mに設定しましたが。
smoore4 2015年

16Mを持っていたが、インポートファイルで何度もそのエラーが発生し、32Mに変更されて機能した。
2016

15

以下を/ etc / mysql / cnfファイルに追加します。

innodb_buffer_pool_size = 64M

例:

key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
innodb_buffer_pool_size = 64M

6
ファイル名/etc/mysql/cnfは正しいですか?そうじゃないの/etc/my.cnf
Peter VARGA、2018

12
SET @@local.net_read_timeout=360;

警告:リモート接続で適用する場合、以下は機能しません。

SET @@global.net_read_timeout=360;

360とは?ミリセック、秒、分?
MasterJoe2

10

このエラーメッセージには3つの原因が考えられます

  1. 通常、これはネットワーク接続の問題を示しています。このエラーが頻繁に発生する場合は、ネットワークの状態を確認する必要があります
  2. 数百万の行が1つ以上のクエリの一部として送信されているときに、「クエリ中」フォームが発生することがあります。
  3. ごくまれに、クライアントがサーバーへの初期接続を試行しているときに発生する可能性があります

詳細について は>>

原因2:

SET GLOBAL interactive_timeout=60;

デフォルトの30秒から60秒以上

原因3:

SET GLOBAL connect_timeout=60;

2はこのエラーを表示します-コード:1227。アクセスが拒否されました。この操作にはSUPER権限(少なくとも1つ)が必要
MasterJoe2

9

ありがとうございます。しかし、mysqldbの更新により、構成は次のようになりました。

max_allowed_pa​​cket

net_write_timeout

net_read_timeout

mysql doc


8

mysql設定ファイルの 'interactive_timeout'および 'wait_timeout'プロパティを必要な値に設定する必要があります。


これは私を助けます。my.cnfの「interactive_timeout」が100に設定されましたが、短すぎます。私は3600秒(またはあなたのための任意の値の大きいのに十分な)、問題resolved.Thxにそれを変更した後
CobraBJ

7

MySQLの適切な機能に必要な多くのテーブルの再構築とともに、innoDBエンジンを再構築するMySQLアップグレードを実行するだけですperformance_schemainformation_schema

シェルから以下のコマンドを発行します。

sudo mysql_upgrade -u root -p

このエラーはMySQL Workbench 6.1.4まで(そしてしばらくしてから)現れ、6.1.6でも発生します(ただし、数回使用した後のみ)。最近、1つのGUIでのみ問題が発生した。
Davicus、2014年

これで問題が解決しました。Ansibleを使用して既存のデータベースにデータベースをセットアップしたところ、問題が発生しました。このコマンドを実行すると、すべてが正常に機能するように復元されました。
Jubz

4

私は古いことを知っていますが、Macで

1. Control-click your connection and choose Connection Properties.
2. Under Advanced tab, set the Socket Timeout (sec) to a larger value.

4

[編集]-> [設定]-> [SQLエディター]-> [MySQLセッション]で「読み取りタイムアウト」時間を変更します。


3

[編集]→[設定]→[SQLクエリ]で制限行をオフにしてみてください

mysql設定ファイルの 'interactive_timeout'および 'wait_timeout'プロパティを必要な値に設定する必要があるためです。


3

大きなダンプファイルの復元中にこの問題が発生し、ネットワークと何らかの関係がある(ローカルホストでの実行など)という問題を除外できる場合は、私の解決策が役立つ可能性があります。

私のmysqldumpは、mysqlで計算するには大きすぎる少なくとも1つのINSERTを保持していました。show variables like "net_buffer_length";mysql-cli内に入力すると、この変数を表示できます。次の3つの可能性があります。

  • mysql内のnet_buffer_lengthを増やします->サーバーの再起動が必要になります
  • でダンプを作成する --skip-extended-insert、挿入ごとに1行使用します->これらのダンプは読みやすいですが、1GBを超える大きなダンプには適していません。非常に遅くなる傾向があるためです。
  • 拡張挿入を使用してダンプを作成します(これはデフォルトです)が、net-buffer_lengthを制限します。たとえば--net-buffer_length NR_OF_BYTES、NR_OF_BYTESがサーバーのnet_buffer_lengthよりも小さい場合->サーバーの再起動は必要ありませんが、これが最良の解決策だと思います。

次のmysqldumpコマンドを使用しました。 mysqldump --skip-comments --set-charset --default-character-set=utf8 --single-transaction --net-buffer_length 4096 DBX > dumpfile


2

.csvファイルを読み込むときに同じ問題が発生しました。ファイルを.sqlに変換しました。

以下のコマンドを使用して、この問題を回避することができます。

mysql -u <user> -p -D <DB name> < file.sql

これがお役に立てば幸いです。


2

ここで他のすべてのソリューションが失敗する場合-Syslog(/ var / log / syslogまたは同様のもの)をチェックして、クエリ中にサーバーのメモリが不足していないかどうかを確認してください。

スワップファイルを構成せずにinnodb_buffer_pool_sizeを物理メモリに近づけすぎると、この問題が発生しました。MySQLは、データベース固有のサーバー設定innodb_buffer_pool_sizeを最大で物理メモリの約80%に設定することをお勧めします。これを約90%に設定すると、カーネルがmysqlプロセスを強制終了しました。innodb_buffer_pool_sizeを約80%に戻し、問題を修正しました。


2

私の場合、接続タイムアウト間隔を6000以上に設定しても機能しませんでした。

ワークベンチでできることを実行しました。

クエリがDBMSからデータを返すのにかかる最大時間。読み取りタイムアウトをスキップするには0を設定します。

Macの環境設定-> SQLエディタ-> MySQLセッションに移動->接続読み取りタイムアウト間隔を0に設定します。

そしてそれはうまくいきます😄


1

私はこれと同じ問題に直面しました。大きなテーブルへの外部キーがある場合(時間がかかります)に起こると思います。

私は外部キー宣言なしでもう一度テーブル作成ステートメントを実行しようとしましたが、機能しました。

次に、テーブルを作成した後、ALTER TABLEクエリを使用して外部キー制約を追加しました。

これが誰かを助けることを願っています。


1

これは、私のinnodb_buffer_pool_sizeがサーバーで使用可能なRAMサイズよりも大きく設定されているために起こりました。これが原因で物事が中断され、このエラーが発生します。修正は、my.cnfをinnodb_buffer_pool_sizeの正しい設定で更新することです。


1

ワークベンチの編集→設定→SQLエディター→DBMS接続読み取りタイムアウトに進みます:最大3000。エラーは発生しなくなりました。


0

移動:

編集->設定-> SQLエディター

そこに「MySQLセッション」グループの3つのフィールドが表示され、ここで新しい接続間隔(秒単位)を設定できます。


0

ファイアウォールルールがMYSQLへの接続をブロックしていたことがわかりました。ファイアウォールポリシーが解除されて接続が許可された後、スキーマを正常にインポートできました。


0

私も同じ問題を抱えていましたが、私にとっての解決策は、権限が厳しすぎるDBユーザーでした。テーブルでのExecute能力を許可する必要がありましたmysql。それを許可した後、私はもう接続を落とすことはありませんでした


0

最初にインデックスが設定されているかどうかを確認します

SELECT *
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '<schema>'

0

データベースのテーブルに多数の行を作成していたストアドプロシージャを実行しているときに、これに遭遇しました。30秒の境界を超えた直後にエラーが発生することがわかりました。

他の回答のすべての提案を試しました。一部は役に立ちましたが、実際に機能したのは、WorkbenchからSequelProに切り替えたことです。

Workbenchで見つけることができなかったのは、クライアント側の接続だったと思います。多分これは他の誰かにも役立つでしょうか?


0

SQL Work Benchを使用している場合は、インデックスを使用して、テーブルにインデックスを追加し、インデックスを追加します。テーブルのレンチ(スパナ)記号をクリックすると、以下のテーブルの設定が開きます。 、インデックスビューをクリックして、インデックス名を入力し、タイプをインデックスに設定します。インデックス列で、テーブルのプライマリ列を選択します。

他のテーブルの他の主キーについても同じ手順を実行します。


0

SSHを使用してMySQLデータベースに接続する場合、ここに回答がないようです。他の回答で提案されているように、1ではなく2つの場所を確認する必要があります。

Workbench Edit→Preferences→SQL Editor→DBMS

ワークベンチの編集→設定→SSH→タイムアウト

デフォルトのSSHタイムアウトが非常に低く設定されており、タイムアウトの問題のいくつか(ただし、すべてではない)が発生しています。その後、MySQL Workbenchを再起動することを忘れないでください!

最後に、DB管理者に連絡して、my.conf + mysql restartを介してmysql自体のwait_timeoutおよびinteractive_timeoutプロパティを増やすように依頼するか、mysqlの再起動がオプションでない場合はグローバルセットを実行することをお勧めします。

お役に立てれば!


0

守るべき3つのこと:

  1. 複数のクエリが接続の切断を示すかどうか?
  2. MySQLでset queryをどのように使用しますか?
  3. クエリを同時に削除+更新する方法は?

答え:

  1. MySQLは独自の定義子を作成するため、常に定義者を削除するようにしてください。更新に関係する複数のテーブルが単一のクエリを作成しようとする場合、複数のクエリが接続の切断を示すことがあります。
  2. 常に上部に値を設定しますが、条件にSET値が含まれない場合はDELETEの後に設定します。
  3. 両方の操作が異なるテーブルで実行される場合は、最初に削除してから更新を使用します。

-1

について確認する

OOM on /var/log/messages ,
modify innodb_buffer_pool_size value ; when load data , use 50% of os mem ; 

お役に立てれば


-1

これは通常、「現在のバージョンのMySQLサーバーとの非互換性」があることを意味します。mysql_upgradeを参照してください。私はこれと同じ問題に遭遇し、単に実行する必要がありました:

mysql_upgrade --passwordドキュメントには、「MySQLをアップグレードするたびにmysql_upgradeを実行する必要がある」と記載されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.