287

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

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

2006, MySQL server has gone away

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

4

31 に答える 31

432

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

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

[mysqld]
max_allowed_packet=16M

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

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

注:Windowsでは、my.iniまたはmy.cnfファイルをUTF-8エンコーディングではなくANSIで保存する必要がある場合があります。

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

于 2012-02-28T09:48:07.677 に答える
52

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

行を追加します

max_allowed_pa​​cket = 500M

restart the MySQL service終わったら今。

于 2013-10-17T11:51:24.237 に答える
44

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

set global max_allowed_packet=268435456;
于 2016-02-24T10:31:34.727 に答える
36

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

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

于 2011-10-29T23:15:27.020 に答える
19

エラー: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

于 2011-10-29T23:22:21.353 に答える
17

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

--max_allowed_packet=268435456

...\MAMP\bin\startMysql.sh

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

于 2012-02-29T17:00:35.540 に答える
17

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

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

サーバー関連:

  • サーバーにフルメモリがあります-RAMに関する情報を確認してくださいfree -h

フレームワーク関連:

  • フレームワークの設定を確認してください。たとえば、Djangoを使用しますCONN_MAX_AGEドキュメントを参照)

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

  • MySQL/MariaDB変数の値を確認してください。
    • SQLを使用:SHOW VARIABLES LIKE '%time%';
    • コマンドライン:mysqladmin variables
  • エラーの詳細度をオンにします。
    • MariaDB:log_warnings = 4
    • MySQL:log_error_verbosity = 3
  • エラーの詳細については、ドキュメントを確認してください
于 2019-02-21T09:48:06.917 に答える
12

このエラーは、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

于 2015-01-16T04:26:38.200 に答える
12

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

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

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

max_allowed_pa​​cket = 500M

innodb_log_file_size = 128M

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

于 2019-08-03T08:32:14.433 に答える
11

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

max_allowed_packet=8M

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

upload_max_filesize=8M

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

于 2015-10-16T16:02:00.887 に答える
11

DigitalOceanUbuntuサーバーでこれと同じエラーが発生していました。

max_allowed_pa​​cketとwait_timeoutの設定を変更しようとしましたが、どちらも修正されませんでした。

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

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

于 2016-09-19T23:45:55.700 に答える
9

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

12個のCPUコアと32GBのRAMを搭載したサーバーでも同じ問題が発生していました。私はさらに調査し、RAMを解放しようとしました。これは、RAMを解放するためにUbuntu14.04で使用したコマンドです。

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
于 2017-03-26T05:38:58.833 に答える
7

私の場合、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
于 2016-09-08T14:31:12.153 に答える
6

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

うまくいけば、これは他のWampserverユーザーに役立つでしょう。

于 2018-03-14T14:54:04.347 に答える
6

これは通常、MySQLサーバーの接続の問題またはタイムアウトを示します。通常、my.cnfなどのwait_timeoutmax_allowed_pa​​cketを変更することで解決できます。

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

wait_timeout = 28800

max_allowed_pa​​cket = 8M

于 2018-06-29T14:35:33.610 に答える
5

Mysqlサーバーがなくなった理由から、Mysqlサーバーのログを確認することをお勧めします。

それはあなたに教えてくれます。

于 2018-06-30T18:06:38.523 に答える
5

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

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

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

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

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

于 2019-05-05T05:44:14.967 に答える
5

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;
于 2019-05-09T20:47:48.180 に答える
4

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

config.vm.provider "virtualbox" do |vb|
  vb.memory = "4096"
end
于 2015-12-13T08:39:28.497 に答える
4

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

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

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

于 2017-05-23T18:36:16.710 に答える
4

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

xamppを使用している場合。xamppコントロールパネルに移動し、[MySqlconfig]をクリックして[my.ini]を開きます。

パケットサイズを増やします。

max_allowed_packet = 2M -> 10M
于 2018-01-10T11:43:53.827 に答える
3

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

# binary logging format - mixed recommended
# binlog_format=mixed

# binary logging format - mixed recommended
binlog_format=mixed
于 2015-09-25T14:30:17.580 に答える
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サーバーを再起動します。

于 2017-06-10T08:18:01.967 に答える
2

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

于 2017-06-16T15:58:16.557 に答える
2

以下の設定を追加するdockerでも同じ問題が発生しましたdocker-compose.yml

db:
    image: mysql:8.0
    command: --wait_timeout=800 --max_allowed_packet=256M --character-set-server=utf8 --collation-server=utf8_general_ci --default-authentication-plugin=mysql_native_password
    volumes:
      - ./docker/mysql/data:/var/lib/mysql
      - ./docker/mysql/dump:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
于 2020-11-11T17:14:47.493 に答える
1

このエラーは基本的に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を上げる必要があります。

于 2018-09-21T10:54:08.257 に答える
1

私もこのエラーに遭遇しました。ただし、max_allowed_packetの値が増加または増加してmy.cnfも、エラーは解決しません。

私がしたことは、データベースのトラブルシューティングです。

  • エラーが続くテーブルを確認しました
  • 次に、各行を確認しました
  • フェッチしても問題ない行と、エラーのみが表示される行があります
  • このエラーの原因となっている値がこれらの行にあるようです
  • ただし、プライマリ列のみを選択しても、エラーは表示されます(SELECT primary_id FROM table

私が考えた解決策は、データベースを再インポートすることです。良いことは、このデータベースのバックアップがあることです。しかし、問題のあるテーブルを削除してから、このテーブルのバックアップをインポートするだけです。それで私の問題は解決しました。


この問題の私の持ち帰り:

  • 常にデータベースのバックアップをとってください。手動またはCRONジョブを介して
  • 影響を受けた行に特殊文字があることに気づきました。したがって、テーブルを復元すると、すぐにこのテーブルの照合をからに変更しlatin1_swedish_ciました。utf8_general_ci
  • 以前はデータベースは正常に機能していましたが、システムで突然この問題が発生しました。多分それは私たちのホスティングプロバイダーによるMySQLデータベースのアップグレードとも関係があります。したがって、頻繁なバックアップは必須です。
于 2021-05-03T01:49:52.460 に答える
0

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

于 2018-06-26T12:10:14.240 に答える
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接続を強制終了することについて何かを学びました。

于 2020-05-20T07:10:26.920 に答える
0

私にとっては、innodbテーブルの破損したインデックスツリーを修正するのに役立ちました。このコマンドでそのようなテーブルをローカライズしました

mysqlcheck -uroot --databases databaseName 

結果

mysqlcheck: Got error: 2013: Lost connection to MySQL server during query when executing 'CHECK TABLE ...

続いて、どのテーブルが問題を引き起こしているかをmysqldログ/var/log/mysqld.logからのみ確認できました。

FIL_PAGE_PREV links 2021-08-25T14:05:22.182328Z 2 [ERROR] InnoDB: Corruption of an index tree: table `database`.`tableName` index `PRIMARY`, father ptr page no 1592, child page no 1234'

mysqlcheckコマンドはそれを修正しませんでしたが、それを明らかにするのに役立ちました。最終的には、mysqlcliからの通常のmysqlコマンドが続くように修正しました

OPTIMIZE table theCorruptedTableNameMentionedAboveInTheMysqld.log
于 2021-08-25T16:04:31.317 に答える
-7

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

于 2011-10-30T00:18:38.240 に答える