Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


B.5.2.10 パケットが大きすぎます

パケットは、MySQL サーバーに送信される単一の SQL ステートメント、クライアントに送信される単一の行、またはマスターレプリケーションサーバーからスレーブに送信されるバイナリログイベントです。

MySQL 5.6 Server およびクライアント間で転送可能なパケットの最大サイズは 1G バイトです。

MySQL クライアントまたは mysqld サーバーが max_allowed_packet バイトより大きいパケットを受け取ると、ER_NET_PACKET_TOO_LARGE エラーが発行され、接続が失われます。一部のクライアントでは、パケットが大きすぎる場合、「クエリー中に MySQL サーバーへの接続が失われました」というエラーを受け取ることもあります。

クライアントとサーバーの両方にそれぞれ max_allowed_packet 変数があるため、大きなパケットを処理する場合は、クライアントとサーバーの両方のこの変数を増やす必要があります。

mysql クライアントプログラムを使用している場合、max_allowed_packet 変数のデフォルトは 16M バイトです。大きな値を設定するには、mysql を次のように起動します。

shell> mysql --max_allowed_packet=32M

これにより、パケットサイズが 32M バイトに設定されます。

サーバーのデフォルトの max_allowed_packet 値は 1M バイトです。サーバーが大きなクエリーを処理する必要がある場合 (たとえば、大きい BLOB カラムを操作している場合) は、この値を増やすことができます。たとえば、この変数に 16M バイトを設定するには、サーバーを次のように起動します。

shell> mysqld --max_allowed_packet=16M

オプションファイルを使用して max_allowed_packet を設定することもできます。たとえば、サーバー側のサイズを 16M バイトに設定するには、次の行をオプションファイルに追加します。

[mysqld]
max_allowed_packet=16M

追加のメモリーは必要なときにのみ割り当てられるため、この変数の値を増やしておくと安全です。たとえば、mysqld が追加のメモリーを割り当てるのは、長いクエリーが発行された場合、またはmysqld が大きな結果行を返す必要がある場合のみです。この変数のデフォルト値が小さいのは、クライアントとサーバーの間の不正なパケットを捕捉するための予防措置であり、誤って大きなパケットが使用されてメモリー不足にならないようにするためでもあります。

大きい BLOB 値を使用しているが、そのクエリーを処理するための十分なメモリーへのアクセスを mysqld に与えていない場合にも、大きいパケットに関する予期しない問題が発生することがあります。これに当てはまると思われる場合は、mysqld_safe スクリプトの先頭に ulimit -d 256000 を追加して、mysqld を再起動してください。