Difference between revisions of "Penanganan kegagalan dan pemulihan"

From OnnoWiki
Jump to navigation Jump to search
(Created page with "Berikut adalah lanjutan dari **Modul 6: Transaksi dan Manajemen Konsistensi**, dengan fokus pada **Penanganan Kegagalan dan Pemulihan** dalam transaksi basis data menggunakan...")
 
Line 1: Line 1:
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**.
+
==Tujuan Pembelajaran==
 
 
---
 
 
 
## 🧠 **Modul 6 (Lanjutan): Transaksi dan Manajemen Konsistensi**
 
 
 
### 🎯 **Tujuan Pembelajaran**
 
 
Setelah mempelajari bagian ini, mahasiswa diharapkan mampu:
 
Setelah mempelajari bagian ini, mahasiswa diharapkan mampu:
- Menjelaskan jenis kegagalan dalam transaksi database.
+
* Menjelaskan jenis kegagalan dalam transaksi database.
- Memahami strategi pemulihan menggunakan fitur MySQL.
+
* Memahami strategi pemulihan menggunakan fitur MySQL.
- Mengimplementasikan pemulihan dengan rollback dan log transaksi (binlog) pada MySQL.
+
* Mengimplementasikan pemulihan dengan rollback dan log transaksi (binlog) pada MySQL.
 
 
---
 
  
## ⚠️ **6.8 Jenis Kegagalan dalam Transaksi**
+
==Jenis Kegagalan dalam Transaksi==
  
1. **Kegagalan Sistem (System Crash)** 
+
* '''Kegagalan Sistem (System Crash)''' - Mati listrik, reboot sistem, atau server MySQL tidak responsif.
  - Mati listrik, reboot sistem, atau server MySQL tidak responsif.
+
* '''Kegagalan Transaksi (Logical Failure)''' - Kesalahan perhitungan, query salah tulis, atau data tidak valid.
2. **Kegagalan Transaksi (Logical Failure)** 
+
* '''Kegagalan Disk (Disk Failure)''' - Kerusakan hardware seperti hard disk crash atau corrupt file system.
  - Kesalahan perhitungan, query salah tulis, atau data tidak valid.
 
3. **Kegagalan Disk (Disk Failure)** 
 
  - Kerusakan hardware seperti hard disk crash atau corrupt file system.
 
  
---
+
==Penanganan Kegagalan: '''ROLLBACK'''==
  
## 🛠 **6.9 Penanganan Kegagalan: ROLLBACK**
+
'''Contoh Kegagalan Transaksi dan ROLLBACK''''
 
 
### ✅ Contoh Kegagalan Transaksi dan ROLLBACK
 
  
 
Misalkan Anda ingin memindahkan uang antar dua rekening:
 
Misalkan Anda ingin memindahkan uang antar dua rekening:
  
```sql
+
START TRANSACTION;
START TRANSACTION;
+
 
+
UPDATE rekening SET saldo = saldo - 20000 WHERE id = 1;
UPDATE rekening SET saldo = saldo - 20000 WHERE id = 1;
+
 
+
-- Simulasi kesalahan (misalnya tabel tidak ada atau salah ketik)
-- Simulasi kesalahan (misalnya tabel tidak ada atau salah ketik)
+
UPDATE rekeningsalah SET saldo = saldo + 20000 WHERE id = 2;
UPDATE rekeningsalah SET saldo = saldo + 20000 WHERE id = 2;
+
 
+
-- Karena baris kedua gagal, gunakan rollback:
-- Karena baris kedua gagal, gunakan rollback:
+
ROLLBACK;
ROLLBACK;
 
```
 
  
 
> Hasilnya: Tidak ada perubahan saldo. Transaksi dibatalkan sepenuhnya (atomicity dijaga).
 
> Hasilnya: Tidak ada perubahan saldo. Transaksi dibatalkan sepenuhnya (atomicity dijaga).
  
---
+
==Fitur Pemulihan MySQL: Binary Log==
  
## 🧩 **6.10 Fitur Pemulihan MySQL: Binary Log**
+
'''Binary Log (binlog)''' menyimpan semua statement yang mengubah data (DML) dan dapat digunakan untuk:
  
**Binary Log (binlog)** menyimpan semua statement yang mengubah data (DML) dan dapat digunakan untuk:
+
* '''Recovery''' data setelah crash
 +
* '''Replikasi''' antar server
 +
* '''Audit log transaksi'''
  
- **Recovery** data setelah crash
+
'''Mengecek Status Binary Log'''
- **Replikasi** antar server
 
- **Audit log transaksi**
 
  
### 🔍 Mengecek Status Binary Log
+
sudo mysql -u root -p
 
+
SHOW VARIABLES LIKE 'log_bin';
```bash
 
sudo mysql -u root -p
 
SHOW VARIABLES LIKE 'log_bin';
 
```
 
  
 
Jika belum aktif, aktifkan di file konfigurasi:
 
Jika belum aktif, aktifkan di file konfigurasi:
  
### 🔧 Aktifkan Binary Log di Ubuntu 24.04
+
'''Aktifkan Binary Log di Ubuntu 24.04'''
  
 
Edit `/etc/mysql/mysql.conf.d/mysqld.cnf`:
 
Edit `/etc/mysql/mysql.conf.d/mysqld.cnf`:
  
```ini
+
ini
[mysqld]
+
[mysqld]
server-id      = 1
+
server-id      = 1
log_bin        = /var/log/mysql/mysql-bin.log
+
log_bin        = /var/log/mysql/mysql-bin.log
binlog_format  = ROW
+
binlog_format  = ROW
```
 
  
 
Kemudian restart MySQL:
 
Kemudian restart MySQL:
  
```bash
+
sudo systemctl restart mysql
sudo systemctl restart mysql
 
```
 
  
---
+
==Pemulihan dengan Binary Log==
 
 
## 🔄 **6.11 Pemulihan dengan Binary Log**
 
  
 
Jika terjadi crash, Anda bisa:
 
Jika terjadi crash, Anda bisa:
  
1. **Restore backup** terakhir
+
* '''Restore backup''' terakhir
2. **Re-apply log** dari binary log menggunakan:
+
* '''Re-apply log''' dari binary log menggunakan:
  
```bash
+
mysqlbinlog /var/log/mysql/mysql-bin.000001 | mysql -u root -p
mysqlbinlog /var/log/mysql/mysql-bin.000001 | mysql -u root -p
 
```
 
  
 
> Ini akan memutar ulang semua transaksi yang sudah di-*commit* sebelum crash.
 
> Ini akan memutar ulang semua transaksi yang sudah di-*commit* sebelum crash.
  
---
+
==Autocommit dan Crash Protection==
 
 
## 🔁 **6.12 Autocommit dan Crash Protection**
 
  
### 🔹 Cek Autocommit:
+
'''Cek Autocommit:'''
  
```sql
+
SHOW VARIABLES LIKE 'autocommit';
SHOW VARIABLES LIKE 'autocommit';
 
```
 
  
 
Jika `ON`, setiap perintah `INSERT`, `UPDATE`, `DELETE` langsung *commit* otomatis.
 
Jika `ON`, setiap perintah `INSERT`, `UPDATE`, `DELETE` langsung *commit* otomatis.
  
> Untuk transaksi yang aman, **gunakan `START TRANSACTION` dan `COMMIT`/`ROLLBACK` manual**, agar bisa dikontrol.
+
> Untuk transaksi yang aman, '''gunakan `START TRANSACTION` dan `COMMIT`/`ROLLBACK` manual''', agar bisa dikontrol.
  
---
+
==Kesimpulan==
  
## 📌 **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.
  
- 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==
  
Kalau kamu mau saya bantu buat simulasi **pemulihan data dari backup + binary log**, atau skrip **auto-rollback** pakai stored procedure, tinggal bilang aja ya!
+
* [[Database: Kuliah]]

Revision as of 09:03, 14 April 2025

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, gunakan `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