Files
database-kesiswaan/docs/BACKUP_RESTORE.md
T

10 KiB

BACKUP_RESTORE.md - Database Kesiswaan

Panduan backup dan pemulihan data untuk project database-kesiswaan.

Dokumen ini dibuat supaya admin atau operator server bisa menjalankan backup rutin tanpa perlu masuk ke UI aplikasi. Fokusnya sederhana: mudah dijalankan, mudah dicek hasilnya, dan mudah dipulihkan saat terjadi masalah.

Catatan penting: backup yang berhasil dibuat belum otomatis berarti aman. Backup baru benar-benar dipercaya kalau pernah diuji restore atau minimal diverifikasi integritas filenya. Prinsip sederhananya: backup yang belum pernah dites restore = belum terbukti aman.


1. Yang Diamankan

Mekanisme backup ini dirancang untuk mengamankan 3 komponen penting:

  1. Database aplikasi

    • MySQL / MariaDB database_kesiswaan
    • berisi data siswa, orang tua, dokumen, arsip, histori akademik, dan konfigurasi terkait
  2. File dokumen

    • seluruh isi storage/app/public
    • termasuk dokumen siswa, surat keluar, surat mutasi, dokumen kelulusan, branding, dan file upload lain
  3. File .env

    • berisi konfigurasi aplikasi
    • termasuk koneksi database dan pengaturan runtime penting
    • sifatnya sensitif, jadi backup .env harus dijaga ketat

2. Script yang Tersedia

Semua script berada di folder:

/var/www/database-kesiswaan/scripts

A. Backup database saja

./scripts/backup-database-kesiswaan.sh

Gunakan script ini jika:

  • hanya ingin mengamankan database
  • ingin backup lebih sering
  • ingin membuat snapshot data tanpa membackup file dokumen

Output:

  • file .sql.gz

Lokasi default:

/var/backups/database-kesiswaan/database

B. Backup dokumen saja

./scripts/backup-dokumen-kesiswaan.sh

Gunakan script ini jika:

  • hanya ingin mengamankan file dokumen
  • ingin copy/snapshot storage publik secara terpisah

Output:

  • file .tar.gz

Lokasi default:

/var/backups/database-kesiswaan/files

C. Backup penuh (direkomendasikan)

./scripts/backup-full-kesiswaan.sh

Ini adalah script utama yang paling direkomendasikan untuk backup rutin.

Script ini akan:

  • backup database
  • backup dokumen
  • backup .env
  • membuat file manifest ringkas

Output:

  • dump database .sql.gz
  • arsip dokumen .tar.gz
  • salinan .env
  • manifest .txt

3. Lokasi Backup Default

Semua backup disimpan di:

/var/backups/database-kesiswaan/
├── database/
├── files/
├── env/
└── manifests/

Penjelasan:

  • database/ → dump database
  • files/ → arsip dokumen/storage publik
  • env/ → salinan .env
  • manifests/ → catatan ringkas isi backup per timestamp

4. Langkah Cepat untuk Admin

Kalau admin hanya ingin menjalankan backup manual dengan cepat, cukup lakukan ini:

cd /var/www/database-kesiswaan
chmod +x scripts/*.sh
./scripts/backup-full-kesiswaan.sh

Kalau berhasil, akan muncul ringkasan lokasi file hasil backup.


5. Kapan Pakai Script yang Mana?

Gunakan backup-full-kesiswaan.sh jika:

  • backup harian rutin
  • backup sebelum update/deploy besar
  • backup sebelum migrasi server
  • backup sebelum perubahan data massal

Gunakan backup-database-kesiswaan.sh jika:

  • ingin snapshot database lebih sering
  • ingin memperkecil potensi kehilangan data antar backup harian

Gunakan backup-dokumen-kesiswaan.sh jika:

  • ingin backup file dokumen saja
  • sedang audit file upload
  • butuh arsip storage terpisah

6. Retensi Backup

Default retensi backup adalah:

RETENTION_DAYS=14

Artinya file backup yang lebih lama dari 14 hari akan dibersihkan otomatis.

Kalau ingin mengubah retensi saat menjalankan script:

RETENTION_DAYS=30 ./scripts/backup-full-kesiswaan.sh

Contoh di atas akan mempertahankan backup hingga 30 hari.


7. Menjalankan Backup Manual

Backup penuh

cd /var/www/database-kesiswaan
./scripts/backup-full-kesiswaan.sh

Backup database saja

cd /var/www/database-kesiswaan
./scripts/backup-database-kesiswaan.sh

Backup dokumen saja

cd /var/www/database-kesiswaan
./scripts/backup-dokumen-kesiswaan.sh

8. Contoh Hasil Backup Sukses

Contoh output backup penuh:

Database: /var/backups/database-kesiswaan/database/database_kesiswaan-2026-04-14-010000.sql.gz
Dokumen : /var/backups/database-kesiswaan/files/storage-public-2026-04-14-010000.tar.gz
.env    : /var/backups/database-kesiswaan/env/env-2026-04-14-010000.backup
Manifest: /var/backups/database-kesiswaan/manifests/backup-2026-04-14-010000.txt

Kalau output seperti ini muncul, berarti backup sudah berhasil dibuat.


9. Contoh Cron Rutin

Opsi paling sederhana: backup penuh setiap hari jam 01:00

0 1 * * * cd /var/www/database-kesiswaan && /bin/bash ./scripts/backup-full-kesiswaan.sh >> /var/log/database-kesiswaan-backup.log 2>&1

Ini pilihan yang paling cocok untuk awal.


Opsi lebih aman: database tiap 6 jam + backup penuh harian

Backup database tiap 6 jam

0 */6 * * * cd /var/www/database-kesiswaan && /bin/bash ./scripts/backup-database-kesiswaan.sh >> /var/log/database-kesiswaan-db-backup.log 2>&1

Backup penuh harian jam 01:00

0 1 * * * cd /var/www/database-kesiswaan && /bin/bash ./scripts/backup-full-kesiswaan.sh >> /var/log/database-kesiswaan-backup.log 2>&1

10. Cara Memasang Cron

Buka crontab user yang akan menjalankan backup:

crontab -e

Lalu tempel salah satu jadwal cron yang diinginkan.

Setelah disimpan, cron akan berjalan otomatis sesuai jadwal.


11. Cara Cek Hasil Backup

Cek file hasil backup

ls -lah /var/backups/database-kesiswaan/database
ls -lah /var/backups/database-kesiswaan/files
ls -lah /var/backups/database-kesiswaan/env
ls -lah /var/backups/database-kesiswaan/manifests

Cek log cron

tail -f /var/log/database-kesiswaan-backup.log

atau:

tail -f /var/log/database-kesiswaan-db-backup.log

12. Restore Database

Untuk mengembalikan database dari file backup:

gunzip -c /var/backups/database-kesiswaan/database/database_kesiswaan-YYYY-MM-DD-HHMMSS.sql.gz | mysql -u kesiswaan -p database_kesiswaan

Catatan:

  • pastikan database tujuan sudah tersedia
  • pastikan user database punya izin import
  • pastikan file backup yang dipilih memang benar

13. Restore Dokumen

Untuk mengembalikan dokumen siswa dan file publik lain:

mkdir -p /var/www/database-kesiswaan/storage/app/public
tar -xzf /var/backups/database-kesiswaan/files/storage-public-YYYY-MM-DD-HHMMSS.tar.gz -C /var/www/database-kesiswaan/storage/app/public

Setelah itu jalankan:

cd /var/www/database-kesiswaan
php artisan storage:link
php artisan optimize:clear

14. Restore File .env

Kalau file .env perlu dipulihkan:

cp /var/backups/database-kesiswaan/env/env-YYYY-MM-DD-HHMMSS.backup /var/www/database-kesiswaan/.env
chmod 600 /var/www/database-kesiswaan/.env

Hati-hati: .env berisi data sensitif.


15. Verifikasi Backup Setelah Dibuat

Setelah backup selesai dibuat, sangat disarankan melakukan verifikasi ringan:

A. Cek integritas file backup database

gzip -t /var/backups/database-kesiswaan/database/nama-file.sql.gz

B. Cek isi awal dump database

gunzip -c /var/backups/database-kesiswaan/database/nama-file.sql.gz | head

C. Cek isi arsip dokumen

tar -tzf /var/backups/database-kesiswaan/files/nama-file.tar.gz | head

D. Cek file .env backup

ls -lah /var/backups/database-kesiswaan/env

Verifikasi ringan ini membantu memastikan file backup tidak rusak secara kasat mata. Namun, verifikasi terbaik tetap uji restore ke lokasi atau database test.


16. Checklist Setelah Restore

Setelah pemulihan selesai, cek hal berikut:

  • database berhasil di-restore
  • dokumen berhasil di-restore
  • .env benar
  • php artisan optimize:clear sudah dijalankan
  • php artisan storage:link valid
  • halaman login bisa dibuka
  • data siswa tampil
  • preview/download dokumen berjalan
  • portal publik berjalan normal
  • dokumen kelulusan bisa diakses bila tersedia

17. Troubleshooting Ringan

A. Error mysqldump: command not found

Pastikan mysqldump tersedia di server. Biasanya berasal dari package MySQL client / MariaDB client.

B. Error permission menulis ke /var/backups/database-kesiswaan

Pastikan user yang menjalankan script punya izin tulis ke folder backup.

Contoh:

mkdir -p /var/backups/database-kesiswaan
chown -R $(whoami):$(whoami) /var/backups/database-kesiswaan

C. Backup berhasil tapi file tidak ditemukan

Cek:

  • path default backup
  • log cron
  • retensi jangan terlalu pendek

D. Restore dokumen berhasil tapi file tidak tampil di aplikasi

Jalankan:

cd /var/www/database-kesiswaan
php artisan storage:link
php artisan optimize:clear

E. Ingin simpan backup lebih lama

Jalankan script dengan retensi lebih panjang:

RETENTION_DAYS=30 ./scripts/backup-full-kesiswaan.sh

18. Rekomendasi Operasional

  1. Gunakan backup penuh harian.
  2. Kalau data aktif sering berubah, tambahkan backup database tiap 6 jam.
  3. Simpan backup di lokasi yang tidak diexpose web server.
  4. Kalau memungkinkan, salin backup ke lokasi kedua (external disk / server lain).
  5. Uji restore sesekali, jangan hanya membuat backup tanpa pernah menguji pemulihannya.
  6. Lindungi folder backup karena berisi data sensitif.

19. Catatan Keamanan

  • Jangan expose /var/backups/database-kesiswaan ke publik.
  • Jangan commit file backup ke GitHub.
  • Jangan bagikan isi .env backup ke sembarang pihak.
  • File backup database dan dokumen berpotensi mengandung data pribadi siswa.

20. Rekomendasi Paling Praktis

Kalau ingin paling sederhana dan aman, cukup lakukan dua hal ini:

Jalankan manual saat perlu

cd /var/www/database-kesiswaan
./scripts/backup-full-kesiswaan.sh

Pasang cron harian

0 1 * * * cd /var/www/database-kesiswaan && /bin/bash ./scripts/backup-full-kesiswaan.sh >> /var/log/database-kesiswaan-backup.log 2>&1

Dengan itu, aplikasi sudah punya fondasi backup operasional yang jauh lebih proper daripada backup manual sesekali tanpa pola.