MySQL エラー — Backup の復元中に「Row size too large」

別のサイトで Backup を復元しているときに、次のようなエラーが発生することがあります:

「Could not restore query. MySQL has returned the error code 1118, with message ‘Row size too large (> 8126)’」

または、

「Your server reached the maximum row size of the table」

この問題は、InnoDB が最大行サイズに達し、それ以上のデータを保存できないことが原因です。

根本原因

この問題の根本原因は、MySQL / MariaDB のデータベースエンジン (InnoDB) には最大行サイズの制限があることです。この制限を超えると、データベースエンジンはその行にこれ以上データを保存できなくなります。この制限は通常、大規模なデータセットをインポートしようとしたり、テーブル構造に大きな VARCHAR フィールドが含まれている場合に発生します。

Row Size Too Large エラーを解決する一般的な手順

一般的に、これを修正する手順は次のとおりです:

  1. 大きな VARCHAR を使う代わりに、テーブルのフィールドを TEXT または BLOB に変更します。
  2. テーブルの ROW_FORMAT を DYNAMIC に変更します。
  3. innodb_strict_mode をオフに設定します。

これらの手順はサーバー設定の変更と WordPress テーブル構造の変更を伴うため、データ損失やその他の問題の可能性があるため、通常は推奨されません。

フィルターを使用して Backup 復元を機能させる

Backup ファイルから現在のサイトに SQL データをインポートすることが目的です。この目標を達成するために、復元処理中に innodb_strict_mode をオフに設定します。

このエラーが発生した場合、Must-Use Plugin (MU-plugin) に以下のコードを追加して innodb_strict_mode をオフにできます:

PHP
<?php
add_filter('wpstg.backup.restore.innodbStrictModeOff', '__return_true');

ステップバイステップの手順

  1. FTP または Hosting コントロールパネルのファイルマネージャー経由で WordPress サイトに接続してください。
  2. wp-content/mu-plugins ディレクトリに移動してください。mu-plugins ディレクトリが存在しない場合は、作成してください。
  3. mu-plugins ディレクトリ内に新しい PHP ファイルを作成してください。たとえば disable-innodb-strict-mode.php のように、お好きな名前を付けられます。
  4. 新しく作成した PHP ファイルを編集し、以下のコードを追加してください:
PHP
<?php
add_filter('wpstg.backup.restore.innodbStrictModeOff', '__return_true');
  1. ファイルを保存して閉じてください。これでこのコードは毎回のページ読み込み時に実行され、復元処理中に innodb_strict_mode がオフになることを保証します。
  2. Backup Plugin から復元処理を再試行してください。エラーは発生しないはずです。

重要な注意事項

これは復元処理中に MySQL の行サイズ制限を回避するための回避策です。innodb_strict_mode をオフにすると、データ整合性の潜在的問題が発生する可能性があるため、問題の永続的な解決策ではありません。復元処理の後、MU-plugin を削除するかフィルターを無効化することを検討し、行サイズ制限問題のより永続的な解決策については、データベースの専門家に相談してください。

関連記事

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.