BLOGスタッフブログ

インソースマーケティングデザイン

2016.07.20 システム

MySQLのダンプ復元でmax_allowed_packetでハマった話

マネージドサーバーなどでmy.cnfによりmax_allowed_packetが設定できない場合で、mysqlにGot a packet bigger than ‘max_allowed_packet’ bytesと言われた時の対策例になります。

通常の方法

・バックアップ取得
mysqldump -uユーザ名 -pパスワード DB名 > ~/sqlspace/database.dmp

・バックアップ復元
mysql -uユーザ名 -pパスワード DB名 < ~/sqlspace/database.dmp

とやる必要があります。

この時、マネージドサーバーなどでmy.cnfを触ることを許されていない環境で
max_allowed_packetが1Mなどになっている場合、ダンプを戻そうとすると

ERROR 1153 (08S01) at line XXX: Got a packet bigger than ‘max_allowed_packet’ bytes

と、言われてしまいます。

設定を変更せずにダンプを戻そうと必死に情報を探しましたが
なかなか情報に行き着かず・・・
そこで、そもそもですが
mysqldumpのデフォルトでは高速化のために1クエリで大量のINSERTを投げる仕様になっていることを思い出し
それを切ればいいと思い実践してみました。

対策をした場合

・バックアップ取得
mysqldump -uユーザ名 -pパスワード -c –skip-extended-insert DB名 > ~/sqlspace/database.dmp

・バックアップ復元
mysql -uユーザ名 -pパスワード DB名 < ~/sqlspace/database.dmp

すごく時間がかかります!!(この時は20分くらい)
ちなみに出力サイズが2倍以上になります。
ただし、画像などのバイナリデータが含まれていてオーバーする場合は無理かもしれません。
あくまでもINSERTクエリを分割できるものに限定されます。
あくまで一例ということで説明させていただきたいと思います。

インソースマーケティングデザインが書いた他の記事

見積もり・ご依頼など、
お気軽にご相談ください

本サイトはユーザーエクスペリエンスの向上などを目的に、Cookieを使用しています。
右記のバナーで「同意する」をクリックする、または本サイトを利用することにより、
お客様は弊社のCookieポリシーに同意したことになります。

同意します