Troubleshooting ERROR 1118 MariaDB (Row Size Too Large)



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

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

Posting Komentar

Please Select Embedded Mode To Show The Comment System.*

Lebih baru Lebih lama

Formulir Kontak