おつかれさまです。Dです。
サーバー移行等でMariaDBのダンプリストアをすることがあると思います。その際にエラーで正常終了しなかったりしますよね・・最近遭遇したMariaDBのリストア中に発生するRow size too largeエラーの解決方法を備忘録も兼ねて紹介します。
なぜエラーが起こるのか
MariaDBのリストア中にRow size too largeエラーが発生する原因は、データベース内の行のサイズがInnoDBの制限(8126バイト)を超えていることみたいです。
なんか難しい感じに聞こえますが、データを入れ過ぎている状況のようです・・・
サーバー環境
サーバー環境はAlmaLinux9でMariaDBのバージョンは10.5になります。
解決法:Dumpファイルのテーブル形式を変更する
遭遇したエラー表示はこんな感じでした。
# mysql -uroot -p < mysql.dump
ERROR 1118 (42000) at line 9486: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
dumpファイルの中身をviなどで開いて「ROW_FORMAT」の部分を探します。見つけたら以下のようにDYNAMICに変更します。
) ENGINE=InnoDB AUTO_INCREMENT=1217 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
↓
) ENGINE=InnoDB AUTO_INCREMENT=1217 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
他にDumpファイルに不備がなければ、これでリストアが上手くいくはずです。
まとめ
この他にもテーブルの行サイズを縮小したり、テーブルを分割することでも対応が可能なようでした。ただ、テーブル操作はそもそもDBの設計を理解していないと難しいので下手には出来ないですね・・・