Penanganan kegagalan dan pemulihan
Tujuan Pembelajaran
Setelah mempelajari bagian ini, mahasiswa diharapkan mampu:
- Menjelaskan jenis kegagalan dalam transaksi database.
- Memahami strategi pemulihan menggunakan fitur MySQL.
- Mengimplementasikan pemulihan dengan rollback dan log transaksi (binlog) pada MySQL.
Jenis Kegagalan dalam Transaksi
- Kegagalan Sistem (System Crash) - Mati listrik, reboot sistem, atau server MySQL tidak responsif.
- Kegagalan Transaksi (Logical Failure) - Kesalahan perhitungan, query salah tulis, atau data tidak valid.
- Kegagalan Disk (Disk Failure) - Kerusakan hardware seperti hard disk crash atau corrupt file system.
Penanganan Kegagalan: ROLLBACK
Contoh Kegagalan Transaksi dan ROLLBACK'
Misalkan Anda ingin memindahkan uang antar dua rekening:
START TRANSACTION; UPDATE rekening SET saldo = saldo - 20000 WHERE id = 1; -- Simulasi kesalahan (misalnya tabel tidak ada atau salah ketik) UPDATE rekeningsalah SET saldo = saldo + 20000 WHERE id = 2; -- Karena baris kedua gagal, gunakan rollback: ROLLBACK;
> Hasilnya: Tidak ada perubahan saldo. Transaksi dibatalkan sepenuhnya (atomicity dijaga).
Fitur Pemulihan MySQL: Binary Log
Binary Log (binlog) menyimpan semua statement yang mengubah data (DML) dan dapat digunakan untuk:
- Recovery data setelah crash
- Replikasi antar server
- Audit log transaksi
Mengecek Status Binary Log
sudo mysql -u root -p SHOW VARIABLES LIKE 'log_bin';
Jika belum aktif, aktifkan di file konfigurasi:
Aktifkan Binary Log di Ubuntu 24.04
Edit `/etc/mysql/mysql.conf.d/mysqld.cnf`:
ini [mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_format = ROW
Kemudian restart MySQL:
sudo systemctl restart mysql
Pemulihan dengan Binary Log
Jika terjadi crash, Anda bisa:
- Restore backup terakhir
- Re-apply log dari binary log menggunakan:
mysqlbinlog /var/log/mysql/mysql-bin.000001 | mysql -u root -p
> Ini akan memutar ulang semua transaksi yang sudah di-*commit* sebelum crash.
Autocommit dan Crash Protection
Cek Autocommit:
SHOW VARIABLES LIKE 'autocommit';
Jika `ON`, setiap perintah `INSERT`, `UPDATE`, `DELETE` langsung *commit* otomatis.
> Untuk transaksi yang aman, `START TRANSACTION` dan `COMMIT`/`ROLLBACK` manual, agar bisa dikontrol.
Kesimpulan
- Transaksi harus mampu pulih dari kegagalan demi menjaga integritas data.
- MySQL mendukung pemulihan transaksi menggunakan `ROLLBACK` dan fitur `binary log`.
- Binary log harus diaktifkan secara manual untuk mendukung point-in-time recovery dan replikasi.
- Selalu gunakan `START TRANSACTION` untuk transaksi kritis agar dapat dikendalikan secara eksplisit.