web-dev-qa-db-ja.com

MySQLエラー2006:mysqlサーバーがなくなった

私は私のオフィスでいくつかのファイルを処理してリモートのMySQLサーバーに結果を報告するためにサーバーを実行しています。

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

2006, MySQL server has gone away

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

204
floatleft

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

詳しくは PHP:mysqli_ping をご覧ください。

29

私は何度もこれに遭遇しました、そして、私は通常その答えが 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に設定します。

324
George

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

行を追加する

max_allowed_pa​​cket = 500M

完了したらrestart the MySQL service

38
Sathish D

私は7GB以上のサイズのMySQLデータベースを復元するためにMySQLコマンドラインで次のコマンドを使用しました、そして、それは働きます。

set global max_allowed_packet=268435456;
30
Geshan Ravindu

MAMP(非プロ版)に追加しました

--max_allowed_packet=268435456

...\MAMP\bin\startMysql.sh

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

15
uwe

エラー:2006( CR_SERVER_GONE_ERROR

メッセージ:MySQLサーバーは消えました

一般的に、この問題を解決するために接続を再試行してから再度クエリを実行することができます。

私はあなたがPDOを使用していると仮定します。もしそうなら、あなたはそれからPDO例外をキャッチし、カウンターをインクリメントし、そしてカウンターがしきい値の下にあるかどうかをもう一度試みます。

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

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

300は、クエリにかかる最大時間と思われる秒数です。

Mysql接続の問題に対処する方法についてのさらなる情報。

編集:あなたがまた使用したいかもしれない他の2つの設定はnet_write_timeoutnet_read_timeoutです。

15
Yzmir Ramirez

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

Mysqlサーバーに行き、そのwait_timeoutを確認してください。

mySQL>変数のように表示する 'wait_timeout'

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

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

10
Saurabh Goyal

私は私のDigitalOcean Ubuntuサーバーでこれと同じエラーを受けていました。

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

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

それが原因であるかどうかを確認するためにfree -hであなたの記憶をチェックしてください。

9
Pikamander2

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

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

8
Kenneth mwangi

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

12個のCPUコアと32 GBのRAMを搭載したサーバーでも同じ問題がありました。私はもっ​​と研究してRAMを解放しようとしました。これはUbuntu 14.04でRAMを解放するために使ったコマンドです。

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

そして、それはすべてを直しました。 1時間ごとに実行するように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
7
Rehmat

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

私はこれらの値を提案するでしょう:

wait_timeout = 28800

max_allowed_pa​​cket = 8M

4
Memo

私の場合、それは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
4
Fedir RYKHTIK

64ビットのWAMPSERVERを使用している場合、WAMPは[wampmysqld64]の下で設定された値ではなく[[wampmysqld64]]の下で設定された値を使用するため、max_allowed_pa​​cketを複数検索してください。 mysqldump]、私にとっては問題でしたが、間違ったものを更新していました。これをmax_allowed_pa​​cket = 64Mのように設定します。

うまくいけば、これは他のWampserverユーザがそこにいるのを助けます。

4
Enomatix24

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

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

考えられないシナリオは、TCPを強制的に接続にリセットするファイアウォールがクライアントとサーバーの間にあることです。

私はその問題を抱えていました、そして私たちの会社のF5ファイアウォールが5分以上アイドル状態である非アクティブセッションを終了するように設定されているのを見つけました。

繰り返しますが、これはありそうもないシナリオです。

4
Ahmed

Mysqlサーバーがログアウトした理由から、Mysqlサーバーのログをチェックすることは常に良い考えです。

それはあなたに教えてくれるでしょう。

3
Alex

私はこのエラー "#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サーバーを再起動してください。

3
um life

あなたのmy.ini/my.cnfの下のligneのコメントを外してください、これはあなたの大きなファイルをより小さな部分に分割します

# binary logging format - mixed recommended
# binlog_format=mixed

# binary logging format - mixed recommended
binlog_format=mixed
3
Nico

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

2
Bo Guo

これはあなたの.sqlファイルサイズの問題かもしれません。

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

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

max_allowed_packet = 2M -> 10M
2
Nikunj Dhimar

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

MySQL/MariaDB関連:

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

my.cnfの例

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

サーバー関連:

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

フレームワーク関連:

  • フレームワークの設定を確認してください。例えばDjangoはCONN_MAX_AGEを使います( docs を参照)

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

  • MySQL/MariaDB変数の値を確認してください。
    • sQLの場合:SHOW VARIABLES LIKE '%time%';
    • コマンドライン:mysqladmin variables
  • エラーの詳細表示をオンにします。
    • MariaDB:log_warnings = 4
    • MySQL:log_error_verbosity = 3
  • エラーの詳細については ドキュメントを確認してください
1
jozo

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
Rupak Nepali

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

0
Subhash

このエラーは基本的に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
Aminah Nuraini

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

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

以下のパラメータを変更します:

max_allowed_pa​​cket = 500M

innodb_log_file_size = 128M

これは私を大いに助けました:)

0
Archana Kamath

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

今すぐmy.iniをクリックして、エディタで開きます。 max_allowed_pa​​cketを必要なサイズに更新してください。

enter image description here

それからmysqlサービスを再起動してください。 Mysqlサービスの停止をクリックして、もう一度開始をクリックします。数分待ってください。 enter image description hereenter image description here

それからMysqlクエリをもう一度実行してみてください。それがうまくいくことを願っています。

0
Hriju