TL;DR — max_allowed_packet サイズを恒久的に増やすには、
my.cnfの[mysqld]セクションにmax_allowed_packet=1Gを追加し、MySQL を再起動してください。再起動なしですぐに修正したい場合は、MySQL クライアントでSET GLOBAL max_allowed_packet=1073741824;を実行します。変更内容はSHOW VARIABLES LIKE 'max_allowed_packet';で確認できます。
Contents

MySQL が max_allowed_packet の値よりも大きいデータパケットを含むクエリを受信すると、「Packet too large」エラーをスローして接続を切断します。これは WordPress 環境でよく見られる MySQL エラーで、Push 中の MySQL パケットサイズエラー、クローン作成中の packet too large、大規模なデータベースインポート、サイト移行などのときに発生します。デフォルト値は大規模な WordPress サイトが必要とする値に対して低めに設定されていますが、お使いのホスティング環境に合った方法さえ見つかれば、増やすのは簡単です。
たとえば、パケットサイズが小さすぎて WP STAGING の Backup 復元が失敗する場合、エラーメッセージに問題となったクエリのサイズが表示されるので、それに応じて max_allowed_packet を調整できます。WP STAGING の現行バージョンでは、Plugin がサーバーの最大許容パケットサイズに基づいてデータベースクエリを動的に制御・実行しますが、直接インポートやサードパーティツールには依然として MySQL 自体の制限が適用されます。
MySQL の max_allowed_packet サイズを変更するには 2 つの方法があります。MySQL 設定ファイルでの恒久的な変更と、SQL による一時的な変更です。どちらも以下で説明します。
max_allowed_packet が制御するもの
max_allowed_packet システム変数は、MySQL クライアントとサーバー間の単一通信パケットの最大サイズを設定します。クエリ・結果行・ストアドルーチンの定義がこの上限を超えると、MySQL は接続を終了し、エラーをログに記録します。
よく見られる症状のパターン:
- 「Packet too large」 — MySQL がクエリを即座に拒否します。
- 「MySQL server has gone away」 — 長時間のインポート中に接続が切断されます。
- サイトに大きな投稿リビジョン・シリアライズされたオプション値・post meta に保存された画像メタデータが含まれる場合の、WP STAGING での Push または復元の失敗。
mysqldumpによる復元中や phpMyAdmin インポート中のエラー。
当社のサポートキューでよくある原因は、post meta として保存された大きな画像ライブラリや投稿リビジョンを含む WP STAGING の Push です。新しいホストへの移行前に max_allowed_packet を増やす場合にもこのエラーで足止めされることが確認されています。移行の前に上限を把握しておけば、移行の途中でインポートが失敗するのを防げます。
どの方法を使うべきか
| 環境 | 最適な方法 |
|---|---|
| SSH アクセス可能な VPS または専用サーバー | my.cnf を編集 — 恒久的 |
| 共有ホスティング (SSH なし) | ホスティング業者に連絡してください。phpMyAdmin で現在値の確認はできますが、恒久的な変更はできません |
| AWS RDS for MySQL | AWS コンソールで DB パラメータグループを変更 |
| DigitalOcean Managed MySQL | コントロールパネルの「Configuration」タブから設定 |
| 再起動なしですぐに修正したい場合 | SET GLOBAL SQL コマンド — 一時的で、再起動でリセットされます |
MySQL がどの設定ファイルを読み込んでいるか不明な場合は、ターミナルで mysql --verbose --help | grep my.cnf を実行すると、検索順序の全体を確認できます。
max_allowed_packet を恒久的に設定する方法
恒久的な変更は MySQL サーバーの再起動後も維持されます。方法はお使いのホスティング環境によって異なります。
VPS または専用サーバー: my.cnf を編集する
- MySQL サーバーのインストールディレクトリにある
my.ini(Windows) またはmy.cnf(Linux/macOS) を開きます。ほとんどの Linux システムでは、このファイルは/etc/mysql/my.cnfまたは/etc/my.cnfにあります。コマンドラインから MySQL サーバーの設定を行う場合は、まずmysql --verbose --help | grep my.cnfで正確なパスを確認してください。 [mysqld]セクションを見つけます。このディレクティブは 必ず[mysqld]の下に書く必要があり、[mysql]や[client]ではいけません。間違ったセクションに書いてしまうのが、修正したように見えても効果が出ない最もよくある原因です。max_allowed_packet行を探すか追加します。値を 1 GB に設定するには:
[mysqld]
max_allowed_packet=1G
- ファイルを保存し、MySQL を再起動します:
sudo systemctl restart mysql
- 新しい値を確認します:
SHOW VARIABLES LIKE 'max_allowed_packet';
共有ホスティング: phpMyAdmin で確認する
SSH アクセスのない共有ホスティングでは、phpMyAdmin → Variables に移動して max_allowed_packet を検索することで、現在の値を確認できます。恒久的に増やすには、ホスティング業者に連絡してください。これは共有コントロールパネル外の管理者アクセスを必要とする、サーバーレベルの設定です。
マネージドデータベース: AWS RDS と DigitalOcean
クラウドのマネージド MySQL サービスでは、設定ファイルではなくコントロールパネルから変数を変更します:
- AWS RDS for MySQL — AWS コンソールで DB インスタンスを開き、関連付けられたパラメータグループに移動して
max_allowed_packetを設定します。変更を有効にするには、更新したパラメータグループを適用してインスタンスを再起動してください。 - DigitalOcean Managed MySQL — データベースクラスタの Configuration タブに移動して、
max_allowed_packetをそこで更新します。
どちらのプラットフォームでも、大規模なインポートや移行を実行する前に値を設定してください。移行前のチェックリストについては移行前に max_allowed_packet を増やすを参照してください。
max_allowed_packet を一時的に設定する方法
max_allowed_packet 変数は SQL コマンドを実行することでグローバルに設定できます。これは再起動なしで即座に有効になりますが、MySQL サーバーが再起動するとリセットされます。変更を永続化したい場合は、必ず my.cnf での恒久的な編集も行ってください。
ただし、my.ini ファイルでも変更しない場合は、グローバルに設定してもサーバーが再起動するたびに値がリセットされます。
サーバー再起動までの間、全員の max_allowed_packet を 1 GB に変更するには:
SET GLOBAL max_allowed_packet=1073741824;
すぐに確認します:
SHOW VARIABLES LIKE 'max_allowed_packet';
この方法は、進行中の復元中に発生する max_allowed_packet エラーの解除や、設定ファイルに反映する前に適切な値をテストするのに便利です。
修正が反映されない場合の対処
変更後に SHOW VARIABLES LIKE 'max_allowed_packet'; が依然として古い値を返す場合は、次のチェックリストを順に確認してください:
- 設定セクションが間違っている。 このディレクティブは
[mysqld]の下に書く必要があります。ファイルを開いて、max_allowed_packet行のすぐ上にあるセクションヘッダーを確認してください。 - 設定ファイルが間違っている。 MySQL は複数のファイルを特定の順序で読み込み、最後に一致した値が優先されます。実際の検索パスを確認してください:
mysql --verbose --help | grep my.cnf
- MySQL が再起動されていない。 サービスが正常に再起動されたか確認してください:
sudo systemctl status mysql
- ファイルが保存されていない、または読み取り不可。 ファイルが保存されていること、MySQL に読み取り権限があることを確認してください。
- レプリカノード。 レプリケーション環境では、
SET GLOBALは接続したノードにのみ適用されます。各レプリカで個別に設定ファイルの更新が必要です。 - クライアント側の制限。 一部のデータベースクライアントは接続時に
max_allowed_packetを設定します。クライアント値がサーバー値より低い場合、サーバー設定にかかわらずクライアントの制限が適用されます。
新しくプロビジョニングされた my.cnf に [mysql] エントリだけがあって [mysqld] セクションヘッダーが欠落していた場合に、修正が静かに失敗するのを目にしたことがあります。MySQL はエラーなくファイルを解析しますが、ディレクティブは無視されます。
ログファイルで MySQL のパケットエラーと同時に出現する関連するサーバーメモリ制限エラーについても、同じ設定セクションのルールが当てはまります。その他の MySQL や PHP のサーバー制限についても、サーバー設定ファイルを編集する同様のアプローチで問題は解決できます。