MySQL:通信パケットの読み取りエラー


13

私はmysqlでこの警告を受けます、

[Warning] Aborted connection 21 to db: 'MyDB' user: 'MyUser' host: 'localhost' (Got an error reading communication packets)

私はグーグルでいくつかのトピックを経験しました、そしていくつかの提案によると私max_allowed_packet128 to 512 to 1024まだ同じ行動からそれを増やしました。

私は、Drupalの7を使用していますし、そうBLOBデータの種類がたくさんありますが、1024 Mbmax_allowed_packet私の意見では十分なはずです。

この警告を克服する他の回避策はありますか?

編集:

@Rolandoの提案/回答としていくつかの設定を追加しましたが、同じ警告が表示されます。

私のmysql構成は次のようになります。

[client]
port        = 3306
socket      = /tmp/mysql.sock
default-character-set = utf8

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16K 
max_allowed_packet = 1024M 
table_open_cache = 128 
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 192K
# Query cache disabled
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 100
thread_concurrency = 10
tmp_table_size = 128M
max_heap_table_size = 128M
log_error                = /var/log/mysql/mysql-error.log
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 2

log_warnings = 2

server-id   = 1
binlog-format = row
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
log_bin = mysql-bin
log-slave-updates
relay-log=mysqld-relay-bin
expire_logs_days        = 10
max_binlog_size         = 100M

innodb_data_home_dir = /var/db/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/db/mysql
innodb_buffer_pool_size = 8G
character-set-server = utf8
#innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 2047M
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 8
innodb_lock_wait_timeout = 50
innodb_flush_method = O_DIRECT

[mysqldump]
quick
quote-names
max_allowed_packet = 16M
default-character-set = utf8

[mysql]
default-character-set = utf8

[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 32M

[mysqlhotcopy]
interactive-timeout

[mysqld_save]
syslog

私のアプリケーションはInnoDBのみを使用していますが、mysqlのようなデータベースはほとんどありません。標準のmysqlインストールに付属しているのは、MyISAMエンジンタイプを使用するものだけです。

レプリケーションも確認できるように、この警告はレプリケートされたサーバーでも同じであり、その構成はこれと同じです。


すべてのテーブルがInnoDBですか?
RolandoMySQLDBA 2013

@RolandoMySQLDBA、こんにちは、はい。すべてのテーブルはinnodbです。このWebサイトで、このような他の質問の回答に従って回答しましたが、まだ警告が表示されます。

@RolandoMySQLDBA、私は私の質問を編集し、あなたが提案したことをしました、私はまだその警告を受けています。私はmysql.cnfをここに持っています、それを見てください。何かが足りないかもしれません

MySQL 5.5.35とDrupal 6でこのエラーが発生し始めました。問題を理解できませんでしたが、5.7.7にアップグレードすると解消されました。今では5.7.9で戻ってきました。5.7.7では成功するが5.7.9でアボートする挿入クエリ(6000文字未満のテキスト)を分離しました。ローカルではなく、リモートで実行した場合のみ失敗します。つまり、同じクライアント、同じマシン上で並行して実行されるサーバーの両方のバージョン、同じsql_mode、同じ文字セット、巨大なmax_allowed_pa​​cket。私はキツネです。これを解決したことがありますか?
user19292

回答:


9

すべてのデータがInnoDBであるため、次のように答えることができてうれしいです。max_allowed_pa​​cketが1Gで上限に達しても問題が解決しない場合は、実際に確認する場所が2つしかありません。

  1. innodb_log_buffer_size:InnoDBがディスク上のログファイルに書き込むために使用するバッファーのサイズ(バイト単位)。デフォルト値は8MBです。大きなログバッファを使用すると、トランザクションがコミットする前にログをディスクに書き込む必要なく、大きなトランザクションを実行できます。したがって、大きなトランザクションがある場合、ログバッファーを大きくすると、ディスクI / Oを節約できます。
  2. innodb_log_file_size:ロググループ内の各ログファイルのバイト単位のサイズ。ログファイルの合計サイズは4GB未満である必要があります。デフォルト値は5MBです。実用的な値の範囲は、バッファープールのサイズの1MBから1 / Nです。ここで、Nはグループ内のログファイルの数です。値が大きいほど、バッファープールで必要なチェックポイントフラッシュアクティビティが少なくなり、ディスクI / Oが節約されます。ただし、ログファイルが大きくなると、クラッシュが発生した場合の回復が遅くなります。

2年ほど前に

提案

InnoDBトランザクションログ増やす必要があります。innodb_log_buffer_sizeおよびinnodb_log_file_sizeを安全に増やす手順は次のとおりです。

ステップ01:これらを追加 /etc/my.cnf

[mysqld]
innodb_log_buffer_size = 32M
innodb_log_file_size = 2047M

ステップ02:これをmysqlで実行する

mysql> SET GLOBAL innodb_fast_shutdown = 0;

ステップ03:mysqlをシャットダウンする

service mysql stop

ステップ04:古いログを脇に置きます

mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak

ステップ05:mysqlを起動する

service mysql start

それでおしまい。

InnoDBインフラストラクチャには、さまざまなサイズのBLOBに対して十分なロギングスペースが必要です。

試してみる !!!


回答ありがとうございmysql.cnfます。質問を編集してファイルを追加しました。私はあなたが提案したとおりにしましたが、それでも警告が表示されます。私が見ることができるmax_allowed_packetmysqldumpちょうどです16Mbが、私はそれが原因ではないと思います。key_buffer_sizeただである16Kbと、再びそれが何かであるべきMyISAMと私は使用していないMyISAMアプリケーションにストレージエンジンを。

また、Apacheサーバーでの作業中にこの問題に遭遇した場合は、そのサービスを再起動する必要もありました。これを本当にありがとう-私は無知でした。
dgo

1

この古い質問に関するJan '16の@ user19292のコメントを読んだ後、私は5.7.9から5.7.12にアップグレードし、問題は解消しました。


2
私は5.7.23を使用していて、同じ問題があります
イエスウズカンガ

1
ここでも、5.7.26でエラーが発生します。あなたの場合、アップグレードはおそらく設定もリセットするので、これで問題が解決したかもしれません。
Sliq

0

オプションの変更とMySQLのさまざまなバージョンの試行に約5〜6時間を費やしただけで、常にエラーが発生しました。

私はそれが不思議だと思います:

  • PHPコードがdb接続を適切に閉じていない(警告であり、エラーではない)、mysql_close()または同等のコードです。
  • または、クライアントが接続を閉じるとnginxキャッシュ/プロキシサーバーが接続を閉じるように構成されているため、キャッシュ/プロキシサーバーはオリジンサーバー(mysqlもある)を待機しません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.