9.1 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.
1. Yang Diamankan
Mekanisme backup ini dirancang untuk mengamankan 3 komponen penting:
-
Database aplikasi
- MySQL / MariaDB
database_kesiswaan - berisi data siswa, orang tua, dokumen, arsip, histori akademik, dan konfigurasi terkait
- MySQL / MariaDB
-
File dokumen
- seluruh isi
storage/app/public - termasuk dokumen siswa, surat keluar, surat mutasi, dokumen kelulusan, branding, dan file upload lain
- seluruh isi
-
File
.env- berisi konfigurasi aplikasi
- termasuk koneksi database dan pengaturan runtime penting
- sifatnya sensitif, jadi backup
.envharus 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 databasefiles/→ arsip dokumen/storage publikenv/→ salinan.envmanifests/→ 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:
.envberisi data sensitif.
15. Checklist Setelah Restore
Setelah pemulihan selesai, cek hal berikut:
- database berhasil di-restore
- dokumen berhasil di-restore
.envbenarphp artisan optimize:clearsudah dijalankanphp artisan storage:linkvalid- halaman login bisa dibuka
- data siswa tampil
- preview/download dokumen berjalan
- portal publik berjalan normal
- dokumen kelulusan bisa diakses bila tersedia
16. 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
17. Rekomendasi Operasional
- Gunakan backup penuh harian.
- Kalau data aktif sering berubah, tambahkan backup database tiap 6 jam.
- Simpan backup di lokasi yang tidak diexpose web server.
- Kalau memungkinkan, salin backup ke lokasi kedua (external disk / server lain).
- Uji restore sesekali, jangan hanya membuat backup tanpa pernah menguji pemulihannya.
- Lindungi folder backup karena berisi data sensitif.
18. Catatan Keamanan
- Jangan expose
/var/backups/database-kesiswaanke publik. - Jangan commit file backup ke GitHub.
- Jangan bagikan isi
.envbackup ke sembarang pihak. - File backup database dan dokumen berpotensi mengandung data pribadi siswa.
19. 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.