Backup, Restore & Reset Server
Panduan lengkap untuk backup database, restore, penjadwalan otomatis, dan reset server ujian.
Backup Database
Backup Manual
# Backup ke lokasi default (/root/backup_db/)
examtool backup-db
# Backup ke lokasi lain
examtool backup-db --path=/mnt/external/backup
File backup diberi nama otomatis: backup_db_ujian_YYYYMMDD_HHMMSS.sql.gz
Contoh output:
[ OK ] Backup berhasil: /root/backup_db/backup_db_ujian_20260701_140000.sql.gz (12M)
Kapan Harus Backup
- Sebelum update aplikasi:
examtool backup-full && examtool update - Sebelum ujian penting:
examtool backup-full --path=/root/backup_ujian_penting - Sebelum reconfigure:
examtool backup-full && examtool reconfigure ... - Rutin harian: gunakan scheduler otomatis (lihat di bawah)
Full Backup (Database + Aplikasi)
Backup database dan file aplikasi sekaligus dalam satu direktori:
# Backup ke lokasi default (/root/backup_full/)
examtool backup-full
# Backup ke lokasi lain
examtool backup-full --path=/mnt/external/backup
Menghasilkan dua file dalam satu direktori:
backup_db_ujian_YYYYMMDD_HHMMSS.sql.gz— databasebackup_app_ujian_YYYYMMDD_HHMMSS.tar.gz— aplikasi + config
Rekomendasi: Gunakan
backup-fullsebelum update besar atau ujian penting. Satu command mencakup seluruh server.
Restore Database
Restore dari File Compressed (.sql.gz)
examtool restore-db --file=/root/backup_db/backup_db_ujian_20260701_140000.sql.gz
Restore dari File SQL (.sql)
examtool restore-db --file=/root/backup_db/backup.sql
Langkah Restore Aman
-
Backup dulu database yang sedang aktif (jaga-jaga):
examtool backup-db --path=/root/backup_sebelum_restore -
Restore dari file backup:
examtool restore-db --file=/root/backup_db/backup_yang_diinginkan.sql.gz -
Verifikasi data sudah benar:
mysql -u root -e "USE cbt_kedokteran; SHOW TABLES; SELECT COUNT(*) FROM users;" -
Restart PHP-FPM untuk membersihkan cache:
systemctl restart php8.3-fpm
Catatan: Restore akan menimpa seluruh isi database. Pastikan Anda sudah backup database aktif sebelum restore.
Restore Aplikasi
Restore file aplikasi dan konfigurasi dari backup backup-app:
examtool restore-app --file=/root/backup_app/backup_app_ujian_20260701_140000.tar.gz
Ownership file otomatis diperbaiki ke www-data setelah extract.
Catatan: Setelah restore aplikasi, restart PHP-FPM dan Nginx untuk memuat konfigurasi baru:
systemctl restart php8.3-fpm nginx
Full Restore (Database + Aplikasi)
Restore database dan aplikasi sekaligus:
examtool restore-full \
--file-db=/root/backup_full/backup_db_ujian_20260701_140000.sql.gz \
--file-app=/root/backup_full/backup_app_ujian_20260701_140000.tar.gz
| Parameter | Wajib | Keterangan |
|---|---|---|
--file-db |
Ya | File backup database (.sql atau .sql.gz) |
--file-app |
Ya | File backup aplikasi (.tar.gz) |
Langkah Full Restore Aman
-
Backup dulu kondisi saat ini:
examtool backup-full --path=/root/backup_sebelum_restore -
Restore dari backup:
examtool restore-full \ --file-db=/root/backup_full/backup_db_ujian_xxx.sql.gz \ --file-app=/root/backup_full/backup_app_ujian_xxx.tar.gz -
Restart services:
systemctl restart php8.3-fpm nginx -
Verifikasi aplikasi dan database:
examtool status
Scheduler Backup Otomatis
Setup Cron Harian
Gunakan perintah interaktif:
examtool enable-backup-cron
Anda akan ditanya:
| Pertanyaan | Default | Keterangan |
|---|---|---|
| Jam backup | 2 |
Jam 0-23 (rekomendasi: dini hari saat tidak ada ujian) |
| Menit backup | 0 |
Menit 0-59 |
| Direktori backup | /root/backup_db |
Path tujuan backup |
| Retensi | 7 hari |
Backup lebih lama dari ini otomatis dihapus (0 = simpan semua) |
Contoh interaksi:
[ INFO ] Setup backup database otomatis (cron harian)
Jam backup (0-23, default: 2): 3
Menit backup (0-59, default: 0): 30
Direktori backup (default: /root/backup_db): /root/backup_db
Hapus backup lebih dari berapa hari? (0=tidak dihapus, default: 7): 14
Jadwal : Setiap hari jam 03:30 WIB
Path : /root/backup_db
Retensi : 14 hari (backup lama otomatis dihapus)
Pasang cron backup harian? (y/N): y
[ OK ] Cron backup harian berhasil dipasang
Cek Cron Aktif
# Lihat cron yang terpasang
crontab -l
# Lihat log backup
tail -20 /var/log/examtool-backup-cron.log
Hapus Cron
examtool disable-backup-cron
Tips Scheduler
- Jam backup: pilih jam dini hari saat tidak ada ujian (02:00 - 04:00)
- Retensi 7 hari: cukup untuk recovery dari error yang terdeteksi dalam seminggu
- Retensi 30 hari: untuk lingkungan produksi dengan ujian penting
- Retensi 0 (simpan semua): hanya jika disk cukup besar, pantau disk usage
- Backup sebelum ujian: jalankan
examtool backup-dbmanual selain cron, simpan ke path terpisah
Pindahkan Backup ke External
Cron hanya menyimpan backup di server. Untuk keamanan ekstra, pindahkan secara berkala ke storage lain:
# Copy ke server lain via SCP
scp /root/backup_db/backup_db_ujian_*.sql.gz user@backup-server:/backups/
# Atau sync ke external drive
rsync -av /root/backup_db/ /mnt/external/backup_ujian/
Uninstall (Reset Server)
Uninstall Konfigurasi
Untuk menghapus semua konfigurasi server ujian dan memulai dari awal:
examtool uninstall --confirm
Flag --confirm wajib untuk mencegah penghapusan tidak sengaja. Setelah itu masih akan muncul konfirmasi sekali lagi.
Yang Dihapus
| Komponen | Detail |
|---|---|
| Konfigurasi Nginx | vhost ujian, rate limiting, sites-enabled |
| Konfigurasi PHP-FPM | pool ujian |
| Konfigurasi MariaDB | tuning file |
| Fail2ban | jail examtool, custom filter |
| Aplikasi | /var/www/ujian/ dan /var/www/rasch/ |
| SSL | /etc/ssl/ujian/ |
| System tuning | sysctl dan limits config |
| Log rotation | config logrotate examtool |
| Config files | /etc/examtool.conf dan /etc/examtool.env |
| Firewall | UFW rules di-reset |
Yang TIDAK Dihapus
| Komponen | Alasan |
|---|---|
| Packages (nginx, mariadb, php, dll) | Butuh apt purge manual |
| Database MariaDB | Data masih ada di /var/lib/mysql/ |
Backup di /root/backup_db/ |
Sengaja dipertahankan |
| Final backup | Otomatis disimpan di /root/examtool-final-backup/ |
| Script examtool | /usr/local/bin/examtool tetap ada |
| Cron backup | Jika ada, hapus dulu dengan examtool disable-backup-cron |
Clean Install (Ulang dari Awal)
Untuk install ulang sepenuhnya, ikuti langkah berikut:
Langkah 1: Hapus cron backup (jika ada)
examtool disable-backup-cron
Langkah 2: Full backup (opsional tapi disarankan)
examtool backup-full --path=/root/backup_sebelum_reset
Langkah 3: Hapus monitoring (jika ada)
examtool remove-monitoring --confirm
Langkah 4: Uninstall
examtool uninstall --confirm
Langkah 5: (Opsional) Hapus packages jika ingin benar-benar bersih
apt purge -y nginx* php8.3* mariadb-server* memcached fail2ban dnsmasq
apt autoremove -y
# Hapus data MariaDB (HATI-HATI: semua database hilang!)
rm -rf /var/lib/mysql/
Langkah 6: Update examtool ke versi terbaru
examtool self-update
Langkah 7: Install ulang
examtool install \
--domain=demo.ujiancbt.online \
--client=200 \
--file-crt=/root/ssl/ujian.crt \
--file-key=/root/ssl/ujian.key \
--username=webdev01 \
--password=Rahasia123
Langkah 8: Restore database (jika ingin data lama)
examtool restore-db --file=/root/backup_sebelum_reset/backup_db_ujian_XXXXXXXX_XXXXXX.sql.gz
Langkah 9: Setup monitoring kembali (opsional)
examtool setup-monitoring
Langkah 10: Setup backup cron kembali
examtool enable-backup-cron
Catatan Penting
- Uninstall otomatis membuat final backup di
/root/examtool-final-backup/sebelum menghapus apapun - Setelah
apt purge mariadb-server, data di/var/lib/mysql/masih ada sampai dihapus manual - SSL certificate dan key perlu disiapkan kembali untuk install ulang
- Password database akan di-generate ulang saat install ulang (cek
/etc/examtool.env)