Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
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 を再起動してください。


User Comments
  Posted by anand shinde on July 29, 2008
By default configuration
------------------------------------------------------------
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 384M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
------------------------------------------------------------

change "max_allowed_packet = 1M" to "max_allowed_packet = 32M"
  Posted by David OBrien on August 28, 2008
On windows when importing very large databases,
I've found it helps to NOT use extended insert statements.
The server would go away for no reason. Switching the exporter to use regular inserts solved this problem.

ie. unchecking "Create bulk INSERT statement(s)" in SQLyog or by checking No EXTENDED INSERTS in MySQL Administrator

  Posted by Devin Butts on October 31, 2008
RE: mysql server has gone away error 2006
RE: Packet-too-large
RE: Windows MySQL Administrator
RE: my.ini
RE: max_allowed_packet

I had tried without success at trying to update max_allowed_packet by editing the my.ini file in Windows Vista. Seemed like nothing would work, there was no effect.

At the MySQL> command prompt, you can type:
show variables like 'max_allowed_packet'
to see if the changes you made are working.

Then I found that the values of my.ini could be changed using the MySQL Administrator. This didn't work either. It could not stop the MySQL server and every time I would click apply changes, it would say it could not apply the changes, Error 1.

Finally, I found that since I'm using Vista (bad words should be placed here), I had to run MySQL Administrator as a Windows Administrator (right click, choose Run as Administrator). Then suddenly I had the power to stop the server, make the changes I wanted and sure enough, it worked.

To change max_allowed_packet, under Startup Variables, go to the networking tab. (Took me forever to find it.)

I navigated in Windows Explorer to C:\Program Files (x86)\MySQL\MySQL Tools for 5.0\, right clicked, MySQLAdministrator.exe, choose properties and set it so it would always run as an Administrator. Now I don't have to remember.

It should be noted that MySQL install puts files in both C:\Program Files (x86)\MySQL and in C:\Program Files\MySQL

using Vista 64-bit, MySQL Administrator 1.2.12, MySQL 5.0.67

  Posted by mohamed badheeu on April 23, 2009
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 384M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M

It helps me very much.
But I want add my esperience here.
In some servers mysql socket is in different location.
socket = /tmp/mysql.sock (if this location is different database error will come up)make sure you write your location correct.
  Posted by Ayaz Ayaz Pasha on March 25, 2010
I copied the variables and pasted into my.ini file.

wait_timeout=28800
interactive_timeout = 28800
max_allowed_packet=64M
socket = /tmp/mysql.sock
skip-locking

Then I just restarted the MySQL service from Administrative Tools & everything worked fine(I was able to insert huge data).

Make sure you check if the parameter values are changed by typing in the command (ex.)show parameters like 'max_allowed_packet' from MySQL client(default).

Thanks

Ayaz

  Posted by Jay Scott ANDERSON on April 2, 2010
Regarding checking the existing parameter value...

show variables like 'max_allowed_packet';

...worked for me.
  Posted by Valentin Bajrami on June 22, 2012
Instead of `show variables like 'max_allowed_packet`; you easily can use `show variables like '%max_all%'; You can issue this for other variables too.
Sign Up Login You must be logged in to post a comment.