Penanganan kegagalan dan pemulihan: Difference between revisions
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..." |
|||
| (One intermediate revision by the same user not shown) | |||
| Line 1: | Line 1: | ||
==Tujuan Pembelajaran== | |||
Setelah mempelajari bagian ini, mahasiswa diharapkan mampu: | 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: | Misalkan Anda ingin memindahkan uang antar dua rekening: | ||
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== | |||
'''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'; | |||
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''' | |||
Edit `/etc/mysql/mysql.conf.d/mysqld.cnf`: | Edit `/etc/mysql/mysql.conf.d/mysqld.cnf`: | ||
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: | ||
sudo systemctl restart mysql | |||
sudo systemctl restart mysql | |||
==Pemulihan dengan Binary Log== | |||
Jika terjadi crash, Anda bisa: | 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 | |||
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== | |||
'''Cek Autocommit:''' | |||
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, | > 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== | |||
* [[Database: Kuliah]] | |||
Latest revision as of 04:22, 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, `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.