Troubleshooting ERROR 1118 MariaDB (Row Size Too Large)
Kasus
Saat import database:
pv backup.sql | mariadb -uroot -p'password' namadatabase-tujuan
Muncul error:
ERROR 1118 (42000): Row size too large (> 8126)
Penyebab
- Terlalu banyak kolom VARCHAR besar dalam satu tabel
- Menggunakan ROW_FORMAT=COMPACT (default lama)
- InnoDB menyimpan sebagian data di dalam row (inline limit 8126 bytes)
- Dump besar (3GB+) → sulit diperbaiki manual
Solusi Cepat (Recommended)
1. Disable Strict Mode saat Import
pv backup.sql | mariadb -uroot -p'password' \
--init-command="SET SESSION innodb_strict_mode=0;" namadatabase-tujuan
2. Paksa ROW_FORMAT = DYNAMIC
Edit config MariaDB:
nano /etc/mysql/mariadb.conf.d/50-server.cnf
Tambahkan:
innodb_file_per_table=1
innodb_default_row_format=DYNAMIC
innodb_strict_mode=0
Restart:
systemctl restart mariadb
3. Patch File Dump (Otomatis)
sed -i 's/ENGINE=InnoDB/ENGINE=InnoDB ROW_FORMAT=DYNAMIC/g' backup.sql
Solusi Lanjut (Append / Resume Import)
1. Lanjut dari Baris Error
sed -n '261381,$p' backup.sql > lanjut.sql
Tambahkan di awal file:
SET SESSION innodb_strict_mode=0;
Import ulang:
pv lanjut.sql | mariadb -uroot -p'password' namadatabase-tujuan
2. Skip Baris Error
sed '261381d' backup.sql > fixed.sql
Solusi Jangka Panjang
✔ Perbaiki Struktur Database
- VARCHAR(255) → TEXT
- Gunakan MEDIUMTEXT untuk data panjang
- Kurangi jumlah kolom string besar dalam satu tabel
✔ Export Lebih Aman
mysqldump --skip-extended-insert --default-character-set=utf8mb4 -u root -p db > dump.sql
Tips Penting
- Ini bukan error data rusak
- Biasanya terjadi di tabel log / jawaban CBT
- ROW_FORMAT=DYNAMIC adalah solusi terbaik