Skip to main content

Recovery Tabel MySQL Crash

·2 mins

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 TABLE atau myisamchk
  • InnoDB lebih mengandalkan mekanisme recovery otomatis. Jika kerusakan cukup parah, biasanya diperlukan proses backup dan restore

Prasyarat
#

Sebelum melakukan perbaikan, pastikan Anda memiliki:

  1. Akses ke server tempat MySQL berjalan
  2. Backup data terbaru
  3. Hak akses administratif (akun root atau user dengan privilege SUPER, RELOAD, dan PROCESS)

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 GB

Untuk 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.MYI

Setelah 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-repair

Jika tabel masih tidak dapat diakses, aktifkan mode recovery dengan mengedit file my.cnf:

[mysqld]
innodb_force_recovery = 1

Jika 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.sql

Jika 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 = 1

Restart kembali service MySQL, lalu buat ulang database dan restore data dari backup:

mysql -u root -p nama_database < backup.sql

Related