MySQLエラー2006:MySQLサーバーが廃止されました


238

一部のファイルを処理し、その結果をリモートのMySQLサーバーに報告するために、オフィスでサーバーを実行しています。

ファイルの処理にはしばらく時間がかかり、プロセスは途中で次のエラーで終了します。

2006, MySQL server has gone away

MySQLの設定wait_timeoutについて聞いたことがありますが、オフィスのサーバーまたはリモートのMySQLサーバーで変更する必要がありますか?


2
それは魔女サーバーがエラーを与えることに依存します
bksi '29年


11
Googleからアクセスする場合:max_allowed_packetサイズまたはwait_timeout量を変更しても問題が解決しない場合は、メモリ使用量を確認してください。同じエラーが発生し、サーバーのメモリ不足が原因でした。1GBのスワップファイルを追加して修正しました。
ピカマンダー2 2016

2
@ Pikamander2ヒントをありがとう!
ihsan

4
ああ!だから、それはすべて嘘ですか?MySQLサーバーは実際にはどこにも行きませんでしたか?それはまだ私のサーバーにありますか?ワオ!:))
Damilola Olowookere

回答:


32

接続を確認し、必要に応じて再確立する方が簡単な場合があります。

詳細については、PHP:mysqli_pingを参照してください。


良い点は、断続的なプロセスがある場合は、すべての接続を使い果たしないように接続を解放することをお勧めします。接続の再構築は一般的に安価です。+1
イズミールラミレス

1
2018年:mysqli_pingは廃止されました
fb

@fb PDOでそれを行うために何が使用されていますか?
beppe9000

359

私はこれに何度も遭遇しましたが、私は通常、非常に低いデフォルト設定の答えであることに気づきましたmax_allowed_packet

それを/etc/my.cnf(下で[mysqld])8または16Mに上げると、通常は修正されます。(MySql 5.7のデフォルトは4194304、4MBです。)

[mysqld]
max_allowed_packet=16M

注:線が存在しない場合は作成してください

注:これは、サーバーの実行中に設定できます。

を使用しset global max_allowed_packet=104857600ます。これにより100MBに設定されます。


28
これは実行中にサーバーで設定できることに注意してください。「set global max_allowed_pa​​cket = 104857600」を使用します。注:私の値は100MBに設定します。
rickumali

26
xamppユーザーの場合、my.cnfは次の場所にあります:C:\ xampp \ mysql \ bin \
Valentin Despa

3
WAMPの場合:C:\ wamp \ bin \ mysql \ mysql5.6.12 \ my.ini、[wampmysqld]の下でmax_allowed_pa​​cket = 500Mを設定
Elia Weiss

2
私の問題を修正しました:)
Altaf Hussain

2
重要な注意:この効果を有効にするには、mysqlサーバーを再起動する必要がありました。すなわちmysql.server stopmysql.server start(2018年10月、MySQL v5.7、MacOS)
Nitin Nain

41

私は同じ問題を抱えていましたが、下max_allowed_packetmy.ini/my.cnfファイルを変更するとうまくいきました[mysqld]

行を追加

max_allowed_pa​​cket = 500M

これでrestart the MySQL service完了です。


5
もう1人は16Mを書き、あなたは500Mを書きました。
pal4life 2014年

1
@ pal4life許可される挿入ステートメントの最大サイズです。insertステートメントが16Mを超える場合(ステートメントがlongblob列などで構成される場合)大量のデータを挿入する場合は、安全性を確保するために500Mのように巨大にします。
Sathish D 2014

これは私にとってはうまくいきましたが、理由はわかりません。デフォルト値は1Mでしたが、100Mに変更するとエラーはなくなりました。この問題は、サーバー上のアイドルスレッドの数を減らすためにwait_timeout = 30を設定したときに始まりました。
ビンセント

36

MySQLコマンドラインで次のコマンドを使用して、7GBを超えるサイズのMySQLデータベースを復元しました。

set global max_allowed_packet=268435456;

なぜこれが反対投票されたのでしょうか?エラーがパケットサイズに関連していることは理にかなっています...
FlorinelChis

これは私の問題を解決しました、それは直接的な質問とは関係ありませんが、この他の問題を抱えている人々を助けるはずです。
ミゲルサント

変更された場合は確認するか、いずれかが使用できる現在の値を表示するにはshow variables like 'max_allowed_packet';
マルチン

16

エラー:2006(CR_SERVER_GONE_ERROR

メッセージ:MySQLサーバーが廃止されました

通常、接続を再試行してからクエリを再度実行して、この問題を解決できます。完全に諦める前に3〜4回程度試してください。

PDOを使用していると仮定します。その場合、PDO例外をキャッチし、カウンターをインクリメントし、カウンターがしきい値を下回っている場合は再試行します。

タイムアウトの原因となっているクエリがある場合は、次のコマンドを実行してこの変数を設定できます。

SET @@GLOBAL.wait_timeout=300;
SET @@LOCAL.wait_timeout=300;  -- OR current session only

ここで、300は、クエリにかかる最大時間と考える秒数です。

Mysql接続の問題に対処する方法に関する詳細情報。

編集:使用したい他の2つの設定はnet_write_timeoutおよびnet_read_timeoutです。


16

MAMP(非プロバージョン)で追加しました

--max_allowed_packet=268435456

...\MAMP\bin\startMysql.sh

クレジットと詳細はこちら


これを本当にありがとう!
TechyDude 2015

動作します!ありがとうございました!
Simon Franzen 2016

11

このエラーは、wait_timeoutの期限切れが原因で発生します。

mysqlサーバーに移動して、そのwait_timeoutを確認します。

mysql> SHOW VARIABLES LIKE 'wait_timeout'

mysql> set global wait_timeout = 600#10分または必要な最大待ち時間

http://sggoyal.blogspot.in/2015/01/2006-mysql-server-has-gone-away.html


なぜ誰もがこの回答に反対票を投じる理由がわかりません。参考になりました。
バジルムーサ2016年

11

このエラーにはいくつかの原因があります。

MySQL / MariaDB関連:

  • wait_timeout -サーバーが接続を閉じる前に、接続がアクティブになるのを待つ秒数。
  • interactive_timeout -サーバーがインタラクティブ接続を待機する時間(秒)。
  • max_allowed_packet-パケットまたは生成された/中間の文字列の最大サイズ(バイト単位)。1024の倍数で、最大のBLOBと同じ大きさに設定します。

my.cnfの例:

[mysqld]
# 8 hours
wait_timeout = 28800
# 8 hours
interactive_timeout = 28800
max_allowed_packet = 256M

サーバー関連:

  • サーバーのメモリがいっぱいです-RAMに関する情報を確認してください free -h

フレームワーク関連:

  • フレームワークの設定を確認してください。Djangoの使用例CONN_MAX_AGEdocsを参照)

それをデバッグする方法:


9

Windowsでは、xamppを使用している人はこのパスxampp / mysql / bin / my.iniを使用して、max_allowed_pa​​cket(セクション[mysqld]の下)を選択したサイズに変更する必要があります。例えば

max_allowed_packet=8M

再びphp.ini(xampp / php / php.ini)で、upload_max_filesizeを選択サイズに変更します。例えば

upload_max_filesize=8M

私がこれを発見するまでしばらくの間私に頭痛を与えました。それが役に立てば幸い。


これが選択された答えになるはずです
bysanchy '26 / 10/26

upload_max_filesize変数が見つかりません。それは常に私のmysqlで認識されなくなります
アミナNuraini '16

9

DigitalOcean Ubuntuサーバーでも同じエラーが発生しました。

max_allowed_pa​​cketとwait_timeoutの設定を変更してみましたが、どちらも修正できませんでした。

サーバーのRAMが不足していることがわかりました。1GBのスワップファイルを追加すると、問題が解決しました。

を使用してメモリをチェックし、free -hそれが原因であるかどうかを確認します。


1
どうもありがとうございます!DigitalOceanでも同じ問題が発生し、このソリューションが機能しました。スクリプトの多くのインスタンスを実行しましたが、いくつかのスレッドの後、突然停止して既存の接続をすべて強制終了しました。今ではそれはすべて良好です。
Stalinko 2017

7

それは私にとってRAMの問題でした。

12個のCPUコアと32 GBのRAMを搭載したサーバーでも同じ問題が発生していました。私はもっ​​と調べてRAMを解放しようとしました。RAMを解放するためにUbuntu 14.04で使用したコマンドは次のとおりです。

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

そして、それはすべてを修正しました。私はそれを毎時間実行するようにcronの下で設定しました。

crontab -e

0 * * * * bash /root/ram.sh;

また、このコマンドを使用して、使用可能な空きRAMの量を確認できます。

free -h

そして、あなたはこのようなものを得るでしょう:

             total       used       free     shared    buffers     cached
Mem:           31G        12G        18G        59M       1.9G       973M
-/+ buffers/cache:       9.9G        21G
Swap:         8.0G       368M       7.6G

5

私の場合、open_files_limit変数の値が低く、mysqldからデータファイルへのアクセスがブロックされました。

私はそれをチェックしました:

mysql> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1185  |
+------------------+-------+
1 row in set (0.00 sec)

変数を大きな値に変更した後、サーバーは再び稼働しました。

[mysqld]
open_files_limit = 100000

5

64ビットWAMPSERVERを使用している場合、WAMPは[wampmysqld64]で設定された値ではなく、[mysqldump]で設定された値を使用するため、max_allowed_pa​​cketの複数の出現を検索してください。これをmax_allowed_pa​​cket = 64Mのように設定します。

うまくいけば、これが他のWampserverユーザーを助けるでしょう。


5

これは通常、MySQLサーバーの接続の問題またはタイムアウトを示します。一般に、my.cnfまたは同様のものでwait_timeoutおよびmax_allowed_pa​​cketを変更することで解決できます。

私はこれらの値を提案します:

wait_timeout = 28800

max_allowed_pa​​cket = 8M


4

Vagrant Boxの場合、ボックスに十分なメモリを割り当ててください

config.vm.provider "virtualbox" do |vb|
  vb.memory = "4096"
end

1
これをありがとう:)
SynackSA

4

まれなシナリオとして、クライアントとサーバーの間にファイアウォールがあり、TCPが接続に強制的にリセットされることがあります。

私はその問題を抱えていて、企業のF5ファイアウォールが5分以上アイドル状態の非アクティブなセッションを終了するように構成されていることがわかりました。

もう一度、これはありそうもないシナリオです。


4

それがなくなった理由のために、Mysqlサーバーのログをチェックすることは常に良い考えです。

それは教えてくれます。


4

xamppサーバーを使用している場合:

xampp-> mysql-> bin-> my.iniに移動します

パラメータの下を変更:

max_allowed_pa​​cket = 500M

innodb_log_file_size = 128M

これは私に大いに役立ちました:)


3

以下のligneのコメントを外しますmy.ini/my.cnf。これにより、大きなファイルが小さな部分に分割されます

# binary logging format - mixed recommended
# binlog_format=mixed

# binary logging format - mixed recommended
binlog_format=mixed

3

「#2006-MySQLサーバーが廃止されました」というエラーの解決策を見つけました。解決策は、2つのファイルをチェックするだけです。

  1. config.inc.php
  2. config.sample.inc.php

Windowsでのこれらのファイルのパスは

C:\wamp64\apps\phpmyadmin4.6.4

これらの2つのファイルで、この値:

$cfg['Servers'][$i]['host']must be 'localhost' .

私の場合、それは:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

それを次のように変更します。

"$cfg['Servers'][$i]['host']" = 'localhost';

両方で確認してください:

  1. config.inc.php
  2. config.sample.inc.phpファイルは 'localhost'でなければなりません。

そして最後のセット:

$cfg['Servers'][$i]['AllowNoPassword'] = true;

次にWampserverを再起動します。


phpmyadminのユーザー名とパスワードを変更するには

config.inc.phpファイルを介してphpmyadminのユーザー名とパスワードを直接変更できます

これらの2行

$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';

ここで、新しいユーザー名とパスワードを指定できます。変更後、ファイルを保存してWAMPサーバーを再起動します。


2

Ubuntuデスクトップの別のMySQLクライアントソフトウェアでエラー2006メッセージが表示されました。JDBCドライバーのバージョンが古すぎることがわかりました。


2

これは、.sqlファイルサイズの問題である可能性があります。

xamppを使用している場合。xamppコントロールパネルに移動-> [MySql config]をクリック-> [my.iniを開く]。

パケットサイズを大きくしてください。

max_allowed_packet = 2M -> 10M

2

XAMPPを使用している場合は、もっと簡単な方法があります。XAMPPコントロールパネルを開き、mysqlセクションのconfigボタンをクリックします。
ここに画像の説明を入力してください

my.iniをクリックすると、エディターで開きます。max_allowed_pa​​cketを必要なサイズに更新します。

ここに画像の説明を入力してください

次に、mysqlサービスを再起動します。Mysqlサービスで停止をクリックし、もう一度開始をクリックします。数分待ちます。 ここに画像の説明を入力してください ここに画像の説明を入力してください

次に、Mysqlクエリをもう一度実行してみます。それがうまくいくことを願っています。


2

MAMP 5.3では、my.cnfが見つからず、max_allowed_pa​​cketが変数に格納されているため、それらを追加しても機能しません。

1つの解決策は次のとおりです。

  1. http:// localhost / phpmyadminに移動します
  2. [SQL]タブに移動します
  3. SHOW VARIABLESを実行して値を確認します。値が小さい場合は、大きい値で実行します
  4. 次のクエリを実行すると、max_allowed_pa​​cketが7GBに設定されます。

    グローバルmax_allowed_pa​​cket = 268435456を設定します。

場合によっては、次の値も増やす必要があります。

set global wait_timeout = 600;
set innodb_log_file_size =268435456;

0

XAMPPを使用するユーザーの場合、C:\ xampp \ mysql \ bin \ my.iniに2つのmax_allowed_pa​​cketパラメータがあります。


0

このエラーは基本的に2つの理由で発生します。

  1. RAMが低すぎる。
  2. 接続しようとすると、データベース接続が閉じられます。

以下のこのコードを試すことができます。

# Simplification to execute an SQL string of getting a data from the database
def get(self, sql_string, sql_vars=(), debug_sql=0):
    try:            
        self.cursor.execute(sql_string, sql_vars)
        return self.cursor.fetchall()
    except (AttributeError, MySQLdb.OperationalError):
        self.__init__()
        self.cursor.execute(sql_string, sql_vars)
        return self.cursor.fetchall()

特に2番目の理由により、その背後にある理由にかかわらず、エラーが軽減されます。

RAMの不足が原因である場合は、コードまたはデータベース構成からデータベース接続の効率を上げるか、単にRAMを増やす必要があります。


0

これが誰かを助けるために:

アプリケーションのいくつかの部分から呼び出される関数で接続を開いたり閉じたりしたときに、このエラーが発生しました。接続が多すぎるので、既存の接続を再利用するか、破棄して新しい接続を作成することをお勧めします。

  public static function getConnection($database, $host, $user, $password)
 {
 if (!self::$instance) {
  return self::newConnection($database, $host, $user, $password);
 } elseif ($database . $host . $user != self::$connectionDetails) {

self :: $ instance-> query( 'KILL CONNECTION_ID()'); self :: $ instance = null; return self :: newConnection($ database、$ host、$ user、$ password); } return self :: $ instance; }結局、私たちが殺害にあまりにも徹底しすぎたので、古い接続で重要なことをしているプロセスが彼らのビジネスを決して終えることができなかったことがわかります。だから私たちはこれらの行をドロップしました

  self::$instance->query('KILL CONNECTION_ID()');
  self::$instance = null;

マシンのハードウェアとセットアップにより、サーバーで許可される接続の数が増えるため、

max_connections = 500

設定ファイルに。これで今のところ問題が解決し、mysql接続の強制終了について何かを学びました。


-5

しばらくオフラインになることがわかっている場合は、接続を閉じて処理を実行し、再接続してレポートを書き込むことができます。


2
MySQLは8時間後にアイドル接続を閉じるため、これは実際に実行可能な回答です。
Bojan Hrnkas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.