Penanganan kegagalan dan pemulihan: Difference between revisions

From OnnoCenterWiki
Jump to navigationJump 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..."
 
No edit summary
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 02: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