MySQL の max_allowed_packet サイズを増やす

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

Visual representation: Increase max_allowed_packet Size in MySQL. Image created by Dali.

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 を編集する

  1. MySQL サーバーのインストールディレクトリにある my.ini (Windows) または my.cnf (Linux/macOS) を開きます。ほとんどの Linux システムでは、このファイルは /etc/mysql/my.cnf または /etc/my.cnf にあります。コマンドラインから MySQL サーバーの設定を行う場合は、まず mysql --verbose --help | grep my.cnf で正確なパスを確認してください。
  2. [mysqld] セクションを見つけます。このディレクティブは 必ず [mysqld] の下に書く必要があり、[mysql][client] ではいけません。間違ったセクションに書いてしまうのが、修正したように見えても効果が出ない最もよくある原因です。
  3. max_allowed_packet 行を探すか追加します。値を 1 GB に設定するには:
[mysqld]
max_allowed_packet=1G
  1. ファイルを保存し、MySQL を再起動します:
sudo systemctl restart mysql
  1. 新しい値を確認します:
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'; が依然として古い値を返す場合は、次のチェックリストを順に確認してください:

  1. 設定セクションが間違っている。 このディレクティブは [mysqld] の下に書く必要があります。ファイルを開いて、max_allowed_packet 行のすぐ上にあるセクションヘッダーを確認してください。
  2. 設定ファイルが間違っている。 MySQL は複数のファイルを特定の順序で読み込み、最後に一致した値が優先されます。実際の検索パスを確認してください:
mysql --verbose --help | grep my.cnf
  1. MySQL が再起動されていない。 サービスが正常に再起動されたか確認してください:
sudo systemctl status mysql
  1. ファイルが保存されていない、または読み取り不可。 ファイルが保存されていること、MySQL に読み取り権限があることを確認してください。
  2. レプリカノード。 レプリケーション環境では、SET GLOBAL は接続したノードにのみ適用されます。各レプリカで個別に設定ファイルの更新が必要です。
  3. クライアント側の制限。 一部のデータベースクライアントは接続時に max_allowed_packet を設定します。クライアント値がサーバー値より低い場合、サーバー設定にかかわらずクライアントの制限が適用されます。

新しくプロビジョニングされた my.cnf[mysql] エントリだけがあって [mysqld] セクションヘッダーが欠落していた場合に、修正が静かに失敗するのを目にしたことがあります。MySQL はエラーなくファイルを解析しますが、ディレクティブは無視されます。

ログファイルで MySQL のパケットエラーと同時に出現する関連するサーバーメモリ制限エラーについても、同じ設定セクションのルールが当てはまります。その他の MySQL や PHP のサーバー制限についても、サーバー設定ファイルを編集する同様のアプローチで問題は解決できます。

関連記事

Updated on 5月 23, 2026

Rene Hermenau

著者: Rene Hermenau

About the author: René Hermenau is the founder of WP STAGING. He works on WordPress backups, staging, migrations, database handling, and safe deployment workflows.