Tabel database MySQL dapat mengalami kerusakan (corrupt atau crash) baik pada storage engine InnoDB maupun MyISAM. Penyebab umum meliputi:
- Pemadaman listrik secara tiba-tiba
- Kerusakan perangkat keras (hardware failure)
- Service MySQL sering dihentikan paksa oleh sistem akibat kehabisan memori (Out of Memory/OOM)
- Shutdown server yang tidak normal
Metode penanganan bergantung pada jenis storage engine yang digunakan:
- MyISAM dapat diperbaiki secara langsung menggunakan perintah khusus seperti
REPAIR TABLEataumyisamchk - InnoDB lebih mengandalkan mekanisme recovery otomatis. Jika kerusakan cukup parah, biasanya diperlukan proses backup dan restore
Prasyarat #
Sebelum melakukan perbaikan, pastikan Anda memiliki:
- Akses ke server tempat MySQL berjalan
- Backup data terbaru
- Hak akses administratif (akun
rootatau user dengan privilegeSUPER,RELOAD, danPROCESS)
Tabel MyISAM #
Agar proses REPAIR TABLE berjalan lebih cepat, Anda dapat meningkatkan beberapa buffer MySQL sebelum menjalankan proses repair:
SET SESSION myisam_sort_buffer_size = 256 * 1024 * 1024; -- 256 MB
SET SESSION read_buffer_size = 64 * 1024 * 1024; -- 64 MB
SET GLOBAL myisam_max_sort_file_size = 100 * 1024 * 1024 * 1024; -- 100 GBUntuk memperbaiki tabel MyISAM, jalankan perintah berikut:
REPAIR TABLE nama_tabel;Jika perbaikan standar tidak berhasil, gunakan mode yang lebih agresif:
REPAIR TABLE nama_tabel USE_FRM;Apabila tabel masih gagal diperbaiki, hentikan service MySQL terlebih dahulu, kemudian jalankan utilitas myisamchk:
myisamchk --recover /path/to/database/nama_tabel.MYISetelah proses selesai, nyalakan kembali service MySQL dan lakukan pengujian untuk memastikan tabel dapat diakses:
SELECT COUNT(*) FROM nama_tabel;
SELECT * FROM nama_tabel LIMIT 5;Tabel InnoDB #
InnoDB memiliki mekanisme recovery yang berbeda dibandingkan MyISAM.
Langkah pertama yang disarankan adalah me-restart service MySQL. Saat startup, InnoDB akan otomatis menjalankan proses recovery jika menemukan transaksi atau data yang belum selesai ditulis.
Selanjutnya, jalankan perintah berikut:
mysqlcheck -Aos --auto-repairJika tabel masih tidak dapat diakses, aktifkan mode recovery dengan mengedit file my.cnf:
[mysqld]
innodb_force_recovery = 1Jika nilai 1 belum berhasil, tingkatkan secara bertahap hingga 6.
Semakin tinggi nilainya, semakin besar risiko kehilangan data atau menyebabkan database menjadi read-only. Gunakan dengan hati-hati dan pastikan backup tersedia.
Simpan perubahan, lalu restart service MySQL.
Setelah MySQL berhasil berjalan kembali, segera lakukan backup database:
mysqldump -u root -p nama_database > backup.sqlJika backup berhasil dibuat, hapus database yang rusak:
DROP DATABASE nama_database;Kemudian nonaktifkan kembali parameter innodb_force_recovery pada file my.cnf:
[mysqld]
# innodb_force_recovery = 1Restart kembali service MySQL, lalu buat ulang database dan restore data dari backup:
mysql -u root -p nama_database < backup.sql