私のアプリケーションは、IMAP経由でメールをダウンロードし、MySQLデータベースに保存します。以前は、最大10 MBのメールサイズをサポートしていたため、メールコンテンツを保存する「中文」列で十分でした。次に、最大30MBのメールをサポートする必要があります。そのため、列のデータ型を「largetext」に変更しました。昨日、サイズが25 MBのメールが保存されました。その後、mysqldumpコマンドを実行するたびにエラーがスローされます。
mysqldump:エラー2020:行でテーブル `ib_mailbox_backup`をダンプするときに 'max_allowed_packet'バイトより大きいパケットを取得しました:3369
行3369には25 MBのメールが含まれています。
MySQL構成では、「max_allowed_packet」を64Mから512Mに増やしましたが、同じエラーで失敗します。 MySQLサーバーが実行されているのと同じマシンでmysqldumpコマンドを実行します。これをどうやって解決しますか?
--max_allowed_packet=512M
をmysqldump
コマンドに追加できます。max_allowed_packet=512M
の[mysqldump]
セクションにmy.cnf
を追加します(@Varunに感謝)注:[mysqldump]
セクションの下にない場合は機能しません...
Debian 9およびMariaDBへのアップグレード後に、私のスクリプトの一部が機能しなくなりました。
DebianのMariaDBでは、mysqldump設定専用の新しい構成ファイル(/etc/mysql/conf.d/mysqldump.cnf
)が導入されています。以前に標準max_allowed_packet
で16M
<> /etc/mysql/my.cnf
を設定していた場合、新しい設定ファイルはその設定を上書きします。そのため、この新しい構成ファイルを確認して、エントリを削除するか、ニーズに合わせて調整してください。
変更がMySQLからMariaDBへのスワップによって導入されたか、DebianがV9での構成ファイルのレイアウト方法に変更を加えたかどうかはわかりません。
同様のエラーがあり、行0のパケットサイズ512Mで失敗しました。明らかにinnodbテーブルが破損していました(mysqlcheckはOKを示しました)。最終的にテーブルを再作成すると、わずか128Mの小さなパケットサイズで正常に機能しました。