別のサイトで 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 エラーを解決する一般的な手順
一般的に、これを修正する手順は次のとおりです:
- 大きな VARCHAR を使う代わりに、テーブルのフィールドを TEXT または BLOB に変更します。
- テーブルの ROW_FORMAT を DYNAMIC に変更します。
- innodb_strict_mode をオフに設定します。
これらの手順はサーバー設定の変更と WordPress テーブル構造の変更を伴うため、データ損失やその他の問題の可能性があるため、通常は推奨されません。
フィルターを使用して Backup 復元を機能させる
Backup ファイルから現在のサイトに SQL データをインポートすることが目的です。この目標を達成するために、復元処理中に innodb_strict_mode をオフに設定します。
このエラーが発生した場合、Must-Use Plugin (MU-plugin) に以下のコードを追加して innodb_strict_mode をオフにできます:
<?php
add_filter('wpstg.backup.restore.innodbStrictModeOff', '__return_true');ステップバイステップの手順
- FTP または Hosting コントロールパネルのファイルマネージャー経由で WordPress サイトに接続してください。
wp-content/mu-pluginsディレクトリに移動してください。mu-pluginsディレクトリが存在しない場合は、作成してください。mu-pluginsディレクトリ内に新しい PHP ファイルを作成してください。たとえばdisable-innodb-strict-mode.phpのように、お好きな名前を付けられます。- 新しく作成した PHP ファイルを編集し、以下のコードを追加してください:
<?php
add_filter('wpstg.backup.restore.innodbStrictModeOff', '__return_true');- ファイルを保存して閉じてください。これでこのコードは毎回のページ読み込み時に実行され、復元処理中に
innodb_strict_modeがオフになることを保証します。 - Backup Plugin から復元処理を再試行してください。エラーは発生しないはずです。
重要な注意事項
これは復元処理中に MySQL の行サイズ制限を回避するための回避策です。innodb_strict_mode をオフにすると、データ整合性の潜在的問題が発生する可能性があるため、問題の永続的な解決策ではありません。復元処理の後、MU-plugin を削除するかフィルターを無効化することを検討し、行サイズ制限問題のより永続的な解決策については、データベースの専門家に相談してください。