Edited at

mysqldumpのmax_allowed_packetのデフォルト値は24MB

More than 1 year has passed since last update.

PHP(PDO)でファイルをMySQLに保存するときに変更しなければいけない点でmax_allowed_packetを24MB以上にしたときの注意点。


mysqldumpのmax_allowed_packetのデフォルト値は24MB

※MySQL5.6の場合

実際に24MB以上のファイルが登録された場合、夜間のDBバックアップなどでmysqldumpを動かしていると以下のようなエラーが発生します。


mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table webpage at row: 172313


原因はmax_allowed_packetがmysqldとmysqldumpで別々に設定されているからです。

つまり、


my.conf

[mysqld]

max_allowed_packet=32MB

とした場合、


my.conf

[mysqldump]

max_allowed_packet=32MB
#デフォルトは24MB

としてやる必要があります。

そしてmysqldは以下のように動的に変更できますが、


set global max_allowed_packet = 33554432;


mysqldmpは動的な変更が不可能なためmysqlの再起動が必要となります。

再起動できない場合は、以下のように--max_allowed_packetを明示的に指定してやります。


mysqldmp -u root -ptest --max_allowed_packet=1G --opt --single-transaction --events --hex-blob testDB testTable


mysqldumpにおける--max_allowed_packetは特に制限する必要はないので、MAXの1Gを指定してやるのが一般的です。