Difference between revisions of "Penanganan kegagalan dan pemulihan"
Onnowpurbo (talk | contribs) (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...") |
Onnowpurbo (talk | contribs) |
||
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, '''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== | |
− | + | * [[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.