MySQL クライアントまたは mysqld
サーバが max_allowed_packet
バイトより大きいパケットを受け取った場合、Packet
too large
エラーが発生し、接続がクローズされます。
MySQL 3.23 で使用できる最も大きなパケットは 16M です(クライアントおよびサーバプロトコルの制限によります)。MySQL 4.01 以上では、パケットの大きさは、サーバ上のメモリ容量でのみ制限されます(理論上は最大 2G)。
1 つの通信パケットは、MySQL サーバに送信される単一の SQL ステートメントか、クライアントに送信される単一行です。
MySQL クライアントまたは mysqld
サーバが max_allowed_packet
バイトより大きいパケットを受け取った場合は、Packet
too
large
エラーが発生し、接続がクローズされます。クライアントの中には、通信パケットが大きすぎると
Lost connection to MySQL server during query
エラーを発生するものもあります。
クライアントとサーバには、共に独自の
max_allowed_packet
変数があります。大きなパケットを扱う場合は、クライアントとサーバ両方の変数を増やす必要があります。
メモリは必要な場合にのみ割り当てられるため、この変数を増やしても安全です。この変数は、クライアントとサーバ間の不正なパケットを捕捉したり、メモリ不足になってしまうような大きなパケットを誤って使用したりしないための予防策です。
mysql
クライアントを使用している場合は、クライアントを
mysql --set-variable=max_allowed_packet=8M
で開始することで、より大きなバッファを指定することができます。
他のクライアントには、この変数を設定する別の方法があります。
MySQL 4.0 以降、--set-variable
は使用されなくなっています。代わりに
--max-allowed-packet=8M
を使用してください。
オプション設定ファイルを使用すると、mysqld
で max_allowed_packet
をより大きなサイズに設定することができます。たとえば、MEDIUMBLOB
の許容範囲いっぱいのデータをテーブルに入れる場合、--set-variable=max_allowed_packet=16M
オプションを指定してサーバを起動します。
大きな BLOB
を使用している場合、大きなパケットに関する見慣れない問題が発生する可能性がありますが、これは、mysqld
に、そのクエリを処理できるだけの十分なメモリへのアクセス権がないことが原因です。その場合は、mysqld_safe
スクリプトの始めに ulimit -d 256000
を追加して、mysqld
を再起動してください。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.