Penanganan kegagalan dan pemulihan

From OnnoWiki
Revision as of 11:22, 14 April 2025 by Onnowpurbo (talk | contribs) (→‎Autocommit dan Crash Protection)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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.


Pranala Menarik