MariaDBリストアでRow size too largeエラーの解決法

D
2024-04-05
2024-04-05

おつかれさまです。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の設計を理解していないと難しいので下手には出来ないですね・・・