Penanganan kegagalan dan pemulihan
Berikut adalah lanjutan dari **Modul 6: Transaksi dan Manajemen Konsistensi**, dengan fokus pada **Penanganan Kegagalan dan Pemulihan** dalam transaksi basis data menggunakan **MySQL di Ubuntu 24.04**.
---
- 🧠 **Modul 6 (Lanjutan): Transaksi dan Manajemen Konsistensi**
- 🎯 **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.
---
- ⚠️ **6.8 Jenis Kegagalan dalam Transaksi**
1. **Kegagalan Sistem (System Crash)**
- Mati listrik, reboot sistem, atau server MySQL tidak responsif.
2. **Kegagalan Transaksi (Logical Failure)**
- Kesalahan perhitungan, query salah tulis, atau data tidak valid.
3. **Kegagalan Disk (Disk Failure)**
- Kerusakan hardware seperti hard disk crash atau corrupt file system.
---
- 🛠 **6.9 Penanganan Kegagalan: ROLLBACK**
- ✅ Contoh Kegagalan Transaksi dan ROLLBACK
Misalkan Anda ingin memindahkan uang antar dua rekening:
```sql 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).
---
- 🧩 **6.10 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
```bash 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:
```bash sudo systemctl restart mysql ```
---
- 🔄 **6.11 Pemulihan dengan Binary Log**
Jika terjadi crash, Anda bisa:
1. **Restore backup** terakhir 2. **Re-apply log** dari binary log menggunakan:
```bash mysqlbinlog /var/log/mysql/mysql-bin.000001 | mysql -u root -p ```
> Ini akan memutar ulang semua transaksi yang sudah di-*commit* sebelum crash.
---
- 🔁 **6.12 Autocommit dan Crash Protection**
- 🔹 Cek Autocommit:
```sql SHOW VARIABLES LIKE 'autocommit'; ```
Jika `ON`, setiap perintah `INSERT`, `UPDATE`, `DELETE` langsung *commit* otomatis.
> Untuk transaksi yang aman, **gunakan `START TRANSACTION` dan `COMMIT`/`ROLLBACK` manual**, agar bisa dikontrol.
---
- 📌 **6.13 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.
---
Kalau kamu mau saya bantu buat simulasi **pemulihan data dari backup + binary log**, atau skrip **auto-rollback** pakai stored procedure, tinggal bilang aja ya!