# BACKUP_RESTORE.md - Database Kesiswaan Panduan backup dan pemulihan data untuk project `database-kesiswaan`. ## Tujuan Menyediakan mekanisme backup **tanpa UI aplikasi**, agar admin/server operator bisa menjalankan backup rutin langsung dari shell/cron. Yang diamankan: - database MySQL/MariaDB `database_kesiswaan` - file dokumen di `storage/app/public` - file `.env` (opsional, tapi sangat disarankan) --- ## Struktur Script Semua script ada di folder: ```bash /var/www/database-kesiswaan/scripts ``` ### 1. Backup database saja ```bash ./scripts/backup-database-kesiswaan.sh ``` Output: - file `.sql.gz` - default lokasi: `/var/backups/database-kesiswaan/database` ### 2. Backup dokumen saja ```bash ./scripts/backup-dokumen-kesiswaan.sh ``` Output: - file `.tar.gz` - default lokasi: `/var/backups/database-kesiswaan/files` ### 3. Backup penuh (direkomendasikan) ```bash ./scripts/backup-full-kesiswaan.sh ``` Output: - backup database - backup dokumen - salinan `.env` - manifest backup --- ## Lokasi Backup Default ```bash /var/backups/database-kesiswaan/ ├── database/ ├── files/ ├── env/ └── manifests/ ``` --- ## Retensi Default Script menggunakan retensi default: ```bash RETENTION_DAYS=14 ``` Artinya backup lebih lama dari 14 hari akan dibersihkan otomatis. Kalau ingin ubah retensi saat menjalankan script: ```bash RETENTION_DAYS=30 ./scripts/backup-full-kesiswaan.sh ``` --- ## Menjalankan Manual ### Backup penuh manual ```bash cd /var/www/database-kesiswaan chmod +x scripts/*.sh ./scripts/backup-full-kesiswaan.sh ``` ### Backup hanya database ```bash cd /var/www/database-kesiswaan ./scripts/backup-database-kesiswaan.sh ``` ### Backup hanya dokumen ```bash cd /var/www/database-kesiswaan ./scripts/backup-dokumen-kesiswaan.sh ``` --- ## Contoh Cron Rutin ### Backup penuh setiap hari jam 01:00 ```cron 0 1 * * * cd /var/www/database-kesiswaan && /bin/bash ./scripts/backup-full-kesiswaan.sh >> /var/log/database-kesiswaan-backup.log 2>&1 ``` ### Backup database saja setiap 6 jam ```cron 0 */6 * * * cd /var/www/database-kesiswaan && /bin/bash ./scripts/backup-database-kesiswaan.sh >> /var/log/database-kesiswaan-db-backup.log 2>&1 ``` ### Backup dokumen setiap hari jam 01:30 ```cron 30 1 * * * cd /var/www/database-kesiswaan && /bin/bash ./scripts/backup-dokumen-kesiswaan.sh >> /var/log/database-kesiswaan-files-backup.log 2>&1 ``` --- ## Restore Database Contoh restore dump database: ```bash gunzip -c /var/backups/database-kesiswaan/database/database_kesiswaan-YYYY-MM-DD-HHMMSS.sql.gz | mysql -u kesiswaan -p database_kesiswaan ``` > Pastikan database target sudah ada dan kredensial benar. --- ## Restore Dokumen Contoh restore dokumen: ```bash 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 ``` Lalu pastikan storage link tetap ada: ```bash cd /var/www/database-kesiswaan php artisan storage:link php artisan optimize:clear ``` --- ## Restore `.env` Kalau perlu mengembalikan `.env`: ```bash cp /var/backups/database-kesiswaan/env/env-YYYY-MM-DD-HHMMSS.backup /var/www/database-kesiswaan/.env chmod 600 /var/www/database-kesiswaan/.env ``` --- ## Checklist Setelah Restore - [ ] database berhasil di-restore - [ ] dokumen berhasil di-restore - [ ] `.env` benar - [ ] `php artisan optimize:clear` dijalankan - [ ] `php artisan storage:link` valid - [ ] halaman login bisa dibuka - [ ] data siswa muncul - [ ] preview/download dokumen berjalan - [ ] portal publik berjalan normal --- ## Rekomendasi Operasional 1. Gunakan **backup penuh harian**. 2. Simpan backup di disk/partisi yang cukup longgar. 3. Kalau memungkinkan, sinkronkan backup ke lokasi kedua (server lain / external storage). 4. Uji restore minimal sesekali, jangan hanya percaya backup berhasil dibuat. 5. Lindungi folder backup karena berisi data sensitif dan kemungkinan salinan `.env`. --- ## Catatan Keamanan - Folder backup bisa mengandung data sensitif. - Jangan expose `/var/backups/database-kesiswaan` ke web. - Jangan commit backup ke GitHub. - Jangan berikan izin baca sembarangan ke file backup `.env`.