web-dev-qa-db-ja.com

mysqldumpでmy.cnfのmysqldよりmax_allowed_pa​​cketが大きいのはなぜですか?

/usr/share/mysql/my-large.cnfなどのサンプル構成を見ると、..

[mysqld]
max_allowed_packet = 1M

[mysqldump]
max_allowed_packet = 16M

ポイントは?

mysqldumpmax_allowed_packetを使用してダンプをエクスポートすると、現在のmysqlに正常にインポートできない可能性があるためです。例えば。 https://stackoverflow.com/questions/93128/mysql-error-1153-got-a-packet-bigger-than-max-allowed-packet-bytes

5
Yoga

max_allowed_packet変数は、単一の結果セットのサイズを制限します。 [mysqld]セクションでは、通常の接続では、1回のクエリで1M相当のデータしか取得できません。 mysqldumpでは通常、「拡張INSERT」クエリを生成します。このクエリでは、同じINSERTコマンド内に複数の行をリストします。したがって、この変数を高く設定することをお勧めします。

上記は簡単な説明です。さて、あなたの質問は「要点は?」明確な答えはありません。 my-XXXXX.cnfのファイルセットは古くなっており、一般に合意されていない推奨事項(innodb_buffer_pool_sizeに割り当てる必要があるメモリの量など)を含め、問題があります。したがって、それを一般的な出発点として考えてください。特に、これらの設定は使用可能なメモリが非常に少ないシステム(128M RAMなど)に関連しているため、数値は今日のハードウェアには実際には適用されません。

必ずしも同じサーバーにダンプをインポートする必要はないので、max_allowed_packetの設定が高い別のサーバーにインポートすることもできます。

補足として、私は通常max_allowed_packet32M64Mのような非常に高い値に設定しています。 sort_buffer_sizeのような他の変数とは対照的に、max_allowed_packetでは、必要な分だけ支払うことができます。したがって、必要がない場合、接続は完全な64Mを割り当てません。

1Mの制限は、TEXTまたはBLOBを含む行があり、1Mを超える可能性があることを意味します。このような場合、実際には読み取ることができません。その行。

4
Shlomi Noach

文書によると[1]:

When creating multiple-row INSERT statements 
(as with the --extended-insert or --opt option), mysqldump creates rows 
up to net_buffer_length length.

そして、net_buffer_lengthは1Mです。上記の構成はmax_allowed_packet/mysqldumpは16Mです。

[1] http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_net_buffer_length

0
Yoga