ABDURROZAK
HOME ABOUT ME MICROSITE KONTAK PERSEMBAHAN HELP
ABDURROZAK.MY.ID // DEBIAN LINUX SERVER FUNDAMENTAL

BACKUP &RECOVERY

Volume 16 dari seri Debian Linux Server Fundamental. Panduan komprehensif backup dan recovery server. Setiap command dan script dijelaskan detail dengan penjelasan per baris. Dari konsep backup, backup file dengan tar dan rsync, backup database, automated backup, cron job, hingga recovery dasar.

VOLUME16 / 17
SUB-BAB8
BACA90 MENIT
BACKUP100%
ABDUR ROZAK, S.Kom. Web Developer & Network Educator - abdurrozak.my.id
VOLUME 16 / 17

BACKUP DAN RECOVERY SERVER

Panduan lengkap Backup & Recovery di Debian Linux. 8 sub-bab mencakup konsep backup, backup file dengan tar, backup file dengan rsync, backup database, automated backup, cron job, recovery dasar, hingga best practices. Setiap command dan script disertai penjelasan detail per baris.
SUB-BAB8 LEVELBackup & Recovery WAKTU90 MENIT
01
SUB-BAB 01 KONSEP

KONSEP BACKUP

Apa Itu Backup?

Backup adalah proses membuat salinan data untuk tujuan pemulihan jika terjadi kehilangan data. Backup adalah komponen kritis dari strategi disaster recovery dan business continuity.

Jenis Backup

JENISDESKRIPSIKELEBIHANKEKURANGAN
Full BackupBackup semua dataRestorasi cepatButuh ruang besar, waktu lama
IncrementalBackup perubahan sejak backup terakhirCepat, hemat ruangRestorasi lambat
DifferentialBackup perubahan sejak full backupRestorasi lebih cepatButuh lebih banyak ruang
MirrorSalinan identikRecovery cepatButuh ruang sama

Strategi Backup 3-2-1

3 SALINAN
Minimal 3 salinan data (1 primary + 2 backup)
2 MEDIA
Simpan di 2 media berbeda (disk, tape, cloud)
1 OFFSITE
1 salinan di lokasi berbeda (offsite/cloud)

Frekuensi Backup

DATAFREKUENSIRETENSI
Data KritisReal-time / hourly30-90 hari
Data PentingDaily30-90 hari
Data BiasaWeekly4-12 minggu
Data ArsipMonthly/Yearly1-7 tahun
KOMPETENSI SUB-BAB 01
  • Memahami konsep backup
  • Memahami jenis backup (full, incremental, differential)
  • Memahami strategi backup 3-2-1
  • Menentukan frekuensi backup yang tepat
02
SUB-BAB 02 TAR

BACKUP FILE DENGAN TAR

Apa Itu tar?

tar (Tape Archive) adalah utility untuk membuat archive file. tar menggabungkan multiple file menjadi satu file archive, dan bisa dikompresi dengan gzip, bzip2, atau xz.

Perintah tar Dasar

TAR DASAR
# Buat archive tanpa kompresi tar -cvf archive.tar /path/to/directory # -c = create # -v = verbose (tampilkan proses) # -f = file (nama file archive) # Buat archive dengan gzip compression tar -czvf archive.tar.gz /path/to/directory # -z = gzip compression # Buat archive dengan bzip2 compression tar -cjvf archive.tar.bz2 /path/to/directory # -j = bzip2 compression # Buat archive dengan xz compression tar -cJvf archive.tar.xz /path/to/directory # -J = xz compression # Extract archive tar -xvf archive.tar # -x = extract # Extract archive dengan gzip tar -xzvf archive.tar.gz # Extract archive dengan bzip2 tar -xjvf archive.tar.bz2 # Extract archive dengan xz tar -xJvf archive.tar.xz # List isi archive tar -tvf archive.tar # -t = list # Extract ke directory tertentu tar -xzvf archive.tar.gz -C /path/to/destination # -C = change to directory

Perintah tar Lanjutan

TAR LANJUTAN
# Backup multiple directories tar -czvf backup.tar.gz /etc /home /var/www # Exclude directory atau file tar -czvf backup.tar.gz /home --exclude=/home/user/downloads # Exclude dengan pattern tar -czvf backup.tar.gz /home --exclude="*.tmp" --exclude="*.log" # Backup dengan date stamp tar -czvf backup-$(date +%Y%m%d).tar.gz /home # Backup dengan incremental tar -czvf backup-full.tar.gz --listed-incremental=backup.snar /home tar -czvf backup-incr-$(date +%Y%m%d).tar.gz --listed-incremental=backup.snar /home # Backup dengan compression level tar -cvf - /home | gzip -9 > backup.tar.gz # -9 = maximum compression # Backup ke remote server tar -czvf - /home | ssh user@remote "cat > /backup/backup.tar.gz" # Extract dari remote server ssh user@remote "cat /backup/backup.tar.gz" | tar -xzvf - # Backup dengan split (untuk file besar) tar -czvf - /home | split -b 100M - backup.tar.gz. # Split menjadi file 100MB # Extract split files cat backup.tar.gz.* | tar -xzvf -
KOMPETENSI SUB-BAB 02
  • Mampu buat archive dengan tar
  • Mampu extract archive
  • Mampu gunakan compression (gzip, bzip2, xz)
  • Mampu exclude files/directories
  • Mampu backup ke remote server
03
SUB-BAB 03 RSYNC

BACKUP FILE DENGAN RSYNC

Apa Itu rsync?

rsync adalah utility untuk sinkronisasi file dan directory. rsync hanya mentransfer file yang berubah, sehingga lebih efisien untuk backup incremental.

Perintah rsync Dasar

RSYNC DASAR
# Sync directory lokal ke lokal rsync -av /source/ /destination/ # -a = archive mode (preserve permissions, timestamps, dll) # -v = verbose # Sync dengan progress rsync -av --progress /source/ /destination/ # Sync dengan delete (mirror) rsync -av --delete /source/ /destination/ # Sync ke remote server rsync -av /source/ user@remote:/destination/ # Sync dari remote server rsync -av user@remote:/source/ /destination/ # Sync dengan exclude rsync -av --exclude="*.tmp" --exclude="*.log" /source/ /destination/ # Sync dengan exclude file rsync -av --exclude-from=exclude.txt /source/ /destination/ # Dry run (test tanpa sync) rsync -avn /source/ /destination/ # Sync dengan compression rsync -avz /source/ user@remote:/destination/ # -z = compress during transfer # Sync dengan delete dan progress rsync -av --delete --progress /source/ /destination/ # Sync dengan bandwidth limit rsync -av --bwlimit=1000 /source/ /destination/ # --bwlimit = limit bandwidth dalam KB/s

Perintah rsync Lanjutan

RSYNC LANJUTAN
# Sync dengan log file rsync -av --log-file=rsync.log /source/ /destination/ # Sync dengan checksum rsync -av --checksum /source/ /destination/ # --checksum = use checksum instead of size/mtime # Sync dengan size only rsync -av --size-only /source/ /destination/ # Sync dengan partial (untuk resume) rsync -av --partial /source/ /destination/ # Sync dengan partial dir rsync -av --partial-dir=.rsync-partial /source/ /destination/ # Sync dengan hard links rsync -av --hard-links /source/ /destination/ # Sync dengan one-file-system rsync -av --one-file-system /source/ /destination/ # Sync dengan backup rsync -av --backup --backup-dir=backup /source/ /destination/ # Sync dengan delete after rsync -av --delete-after /source/ /destination/ # Sync dengan delete before rsync -av --delete-before /source/ /destination/ # Sync dengan delete delay rsync -av --delete-delay /source/ /destination/ # Sync dengan recursive dan times rsync -av --times /source/ /destination/ # Sync dengan recursive dan perms rsync -av --perms /source/ /destination/ # Sync dengan recursive and owner rsync -av --owner /source/ /destination/ # Sync dengan recursive and group rsync -av --group /source/ /destination/
KOMPETENSI SUB-BAB 03
  • Mampu sync file dengan rsync
  • Mampu sync ke/dari remote server
  • Mampu gunakan exclude files
  • Mampu gunakan advanced options
04
SUB-BAB 04 DATABASE

BACKUP DATABASE

Backup MySQL/MariaDB

MYSQL/MARIADB
# Backup single database mysqldump -u root -p database_name > backup.sql # Backup single database dengan compression mysqldump -u root -p database_name | gzip > backup.sql.gz # Backup multiple databases mysqldump -u root -p --databases db1 db2 db3 > backup.sql # Backup all databases mysqldump -u root -p --all-databases > backup.sql # Backup all databases dengan compression mysqldump -u root -p --all-databases | gzip > backup.sql.gz # Backup dengan date stamp mysqldump -u root -p database_name > backup-$(date +%Y%m%d).sql # Backup dengan single transaction (InnoDB) mysqldump -u root -p --single-transaction database_name > backup.sql # Backup dengan lock tables (MyISAM) mysqldump -u root -p --lock-tables database_name > backup.sql # Backup dengan flush logs mysqldump -u root -p --flush-logs database_name > backup.sql # Backup dengan master data (untuk replication) mysqldump -u root -p --master-data database_name > backup.sql # Backup dengan events mysqldump -u root -p --events database_name > backup.sql # Backup dengan routines mysqldump -u root -p --routines database_name > backup.sql # Backup dengan triggers mysqldump -u root -p --triggers database_name > backup.sql # Backup dengan no data (schema only) mysqldump -u root -p --no-data database_name > backup.sql # Backup dengan no create info mysqldump -u root -p --no-create-info database_name > backup.sql # Backup dengan no create db mysqldump -u root -p --no-create-db database_name > backup.sql # Backup dengan ignore tables mysqldump -u root -p --ignore-table=db.table1 --ignore-table=db.table2 database_name > backup.sql # Backup ke remote server mysqldump -u root -p -h remote_host database_name > backup.sql # Backup dengan compression dan remote mysqldump -u root -p database_name | gzip | ssh user@remote "cat > backup.sql.gz"

Backup PostgreSQL

POSTGRESQL
# Backup single database pg_dump -U postgres database_name > backup.sql # Backup single database dengan compression pg_dump -U postgres -Fc database_name > backup.dump # -Fc = custom format (compressed) # Backup single database dengan plain format pg_dump -U postgres -Fp database_name > backup.sql # -Fp = plain text format # Backup multiple databases pg_dump -U postgres -d "db1 db2 db3" > backup.sql # Backup all databases pg_dumpall -U postgres > backup.sql # Backup all databases dengan compression pg_dumpall -U postgres | gzip > backup.sql.gz # Backup dengan date stamp pg_dump -U postgres database_name > backup-$(date +%Y%m%d).sql # Backup dengan schema only pg_dump -U postgres --schema-only database_name > backup.sql # Backup dengan data only pg_dump -U postgres --data-only database_name > backup.sql # Backup dengan clean (drop before create) pg_dump -U postgres --clean database_name > backup.sql # Backup dengan create (create database) pg_dump -U postgres --create database_name > backup.sql # Backup dengan no owner pg_dump -U postgres --no-owner database_name > backup.sql # Backup dengan no privileges pg_dump -U postgres --no-privileges database_name > backup.sql # Backup ke remote server pg_dump -U postgres -h remote_host database_name > backup.sql # Backup dengan compression dan remote pg_dump -U postgres database_name | gzip | ssh user@remote "cat > backup.sql.gz"
KOMPETENSI SUB-BAB 04
  • Mampu backup MySQL/MariaDB database
  • Mampu backup PostgreSQL database
  • Mampu gunakan compression untuk backup
  • Mampu backup ke remote server
05
SUB-BAB 05 AUTOMATED

AUTOMATED BACKUP

Script Backup Otomatis

BACKUP SCRIPT
#!/bin/bash # Backup script untuk server # Konfigurasi BACKUP_DIR="/backup" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="backup-$DATE.tar.gz" RETENTION_DAYS=30 # Buat backup directory jika belum ada mkdir -p $BACKUP_DIR # Backup /etc tar -czf $BACKUP_DIR/etc-$BACKUP_FILE.tar.gz /etc # Backup /home tar -czf $BACKUP_DIR/home-$BACKUP_FILE.tar.gz /home # Backup /var/www tar -czf $BACKUP_DIR/www-$BACKUP_FILE.tar.gz /var/www # Backup MySQL database mysqldump -u root -p'password' --all-databases | gzip > $BACKUP_DIR/mysql-$BACKUP_FILE.sql.gz # Backup PostgreSQL database pg_dumpall -U postgres | gzip > $BACKUP_DIR/postgres-$BACKUP_FILE.sql.gz # Hapus backup lama find $BACKUP_DIR -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete # Log backup echo "Backup completed: $DATE" >> $BACKUP_DIR/backup.log # Kirim email notifikasi (opsional) echo "Backup completed successfully" | mail -s "Backup Report" admin@example.com

Script Backup Lanjutan

ADVANCED BACKUP
#!/bin/bash # Advanced backup script dengan rotation # Konfigurasi BACKUP_DIR="/backup" DATE=$(date +%Y%m%d) DAY_OF_WEEK=$(date +%u) DAY_OF_MONTH=$(date +%d) RETENTION_DAILY=7 RETENTION_WEEKLY=4 RETENTION_MONTHLY=12 # Buat backup directory mkdir -p $BACKUP_DIR/{daily,weekly,monthly} # Backup data tar -czf $BACKUP_DIR/daily/backup-$DATE.tar.gz /etc /home /var/www # Weekly backup (setiap Minggu) if [ $DAY_OF_WEEK -eq 7 ]; then cp $BACKUP_DIR/daily/backup-$DATE.tar.gz $BACKUP_DIR/weekly/ fi # Monthly backup (setiap tanggal 1) if [ $DAY_OF_MONTH -eq 01 ]; then cp $BACKUP_DIR/daily/backup-$DATE.tar.gz $BACKUP_DIR/monthly/ fi # Rotation find $BACKUP_DIR/daily -name "*.tar.gz" -mtime +$RETENTION_DAILY -delete find $BACKUP_DIR/weekly -name "*.tar.gz" -mtime +$RETENTION_WEEKLY -delete find $BACKUP_DIR/monthly -name "*.tar.gz" -mtime +$RETENTION_MONTHLY -delete # Log echo "Backup completed: $DATE" >> /var/log/backup.log
KOMPETENSI SUB-BAB 05
  • Mampu buat script backup otomatis
  • Mampu buat script backup dengan rotation
  • Mampu backup database dengan script
  • Mampu kirim notifikasi email
06
SUB-BAB 06 CRON

CRON JOB

Apa Itu Cron?

Cron adalah job scheduler di Unix/Linux. Cron memungkinkan Anda menjadwalkan command atau script untuk dijalankan secara otomatis pada waktu tertentu.

Format Cron

CRON FORMAT
# Format cron # * * * * * command # │ │ │ │ │ # │ │ │ │ └─── day of week (0-7, 0 and 7 are Sunday) # │ │ │ └───── month (1-12) # │ │ └─────── day of month (1-31) # │ └───────── hour (0-23) # └─────────── minute (0-59) # Contoh: # Menit 0, jam 2, setiap hari 0 2 * * * /path/to/script.sh # Setiap 5 menit */5 * * * * /path/to/script.sh # Setiap jam 0 * * * * /path/to/script.sh # Setiap hari jam 2 pagi 0 2 * * * /path/to/script.sh # Setiap minggu (Minggu jam 2 pagi) 0 2 * * 0 /path/to/script.sh # Setiap bulan (tanggal 1 jam 2 pagi) 0 2 1 * * /path/to/script.sh # Setiap hari kerja (Senin-Jumat jam 2 pagi) 0 2 * * 1-5 /path/to/script.sh # Setiap 15 menit */15 * * * * /path/to/script.sh # Setiap jam pada menit ke-30 30 * * * * /path/to/script.sh # Setiap hari pada jam 2 dan 14 0 2,14 * * * /path/to/script.sh # Setiap 5 menit pada jam 9-17 */5 9-17 * * * /path/to/script.sh

Manajemen Cron

CRON MANAGEMENT
# Edit crontab untuk user crontab -e # Edit crontab untuk user tertentu crontab -e -u username # List crontab crontab -l # List crontab untuk user tertentu crontab -l -u username # Remove crontab crontab -r # Remove crontab untuk user tertentu crontab -r -u username # Edit crontab dari file crontab filename # Contoh crontab untuk backup # Backup database setiap hari jam 2 pagi 0 2 * * * /usr/local/bin/backup-db.sh # Backup file setiap minggu jam 3 pagi 0 3 * * 0 /usr/local/bin/backup-files.sh # Cleanup setiap hari jam 4 pagi 0 4 * * * /usr/local/bin/cleanup.sh
KOMPETENSI SUB-BAB 06
  • Memahami format cron
  • Mampu edit crontab
  • Mampu schedule backup otomatis
  • Mampu manage crontab
07
SUB-BAB 07 RECOVERY

RECOVERY DASAR

Recovery File

RECOVERY FILE
# Extract tar.gz tar -xzvf backup.tar.gz -C /destination # Extract tar.bz2 tar -xjvf backup.tar.bz2 -C /destination # Extract tar.xz tar -xJvf backup.tar.xz -C /destination # Extract specific file tar -xzvf backup.tar.gz path/to/file -C /destination # Extract dengan overwrite tar -xzvf backup.tar.gz -C /destination --overwrite # Extract dengan keep new files tar -xzvf backup.tar.gz -C /destination --keep-newer-files # Extract dengan keep old files tar -xzvf backup.tar.gz -C /destination --keep-old-files # Extract split files cat backup.tar.gz.* | tar -xzvf - -C /destination # Extract dari remote ssh user@remote "cat /backup/backup.tar.gz" | tar -xzvf - -C /destination

Recovery Database

RECOVERY DATABASE
# Recovery MySQL/MariaDB mysql -u root -p database_name < backup.sql # Recovery MySQL/MariaDB dengan compression gunzip < backup.sql.gz | mysql -u root -p database_name # Recovery MySQL/MariaDB all databases mysql -u root -p < backup.sql # Recovery PostgreSQL psql -U postgres database_name < backup.sql # Recovery PostgreSQL dengan compression gunzip < backup.dump.gz | pg_restore -U postgres -d database_name # Recovery PostgreSQL all databases psql -U postgres < backup.sql # Recovery PostgreSQL dengan clean pg_restore -U postgres -d database_name --clean backup.dump # Recovery PostgreSQL dengan create pg_restore -U postgres --create backup.dump
KOMPETENSI SUB-BAB 07
  • Mampu recovery file dari backup
  • Mampu recovery database dari backup
  • Mampu recovery dari compressed backup
  • Mampu recovery dari remote backup
08
SUB-BAB 08 BEST PRACTICES

BEST PRACTICES

Backup Best Practices

BEST PRACTICES
# 1. Gunakan strategi 3-2-1 # - 3 salinan data # - 2 media berbeda # - 1 offsite # 2. Test backup secara berkala tar -tzf backup.tar.gz > /dev/null # 3. Monitor backup tail -f /var/log/backup.log # 4. Encrypt backup tar -czf - /data | gpg -c > backup.tar.gz.gpg # 5. Compress backup tar -czf backup.tar.gz /data # 6. Rotate backup find /backup -name "*.tar.gz" -mtime +30 -delete # 7. Offsite backup rsync -avz /backup/ user@remote:/backup/ # 8. Test recovery tar -xzvf backup.tar.gz -C /tmp/test # 9. Monitor disk space df -h /backup # 10. Alert on failure echo "Backup failed" | mail -s "Backup Alert" admin@example.com

Recovery Best Practices

RECOVERY BEST PRACTICES
# 1. Test recovery secara berkala tar -xzvf backup.tar.gz -C /tmp/test # 2. Verify backup integrity tar -tzf backup.tar.gz > /dev/null # 3. Test database recovery mysql -u root -p test_db < backup.sql # 4. Verify database integrity mysqlcheck -u root -p --all-databases # 5. Document recovery procedure cat > /docs/recovery-procedure.txt << EOF Recovery Procedure: 1. Stop services 2. Restore backup 3. Verify integrity 4. Start services 5. Verify functionality EOF # 6. Test recovery procedure bash /docs/recovery-procedure.sh # 7. Document RTO and RPO cat > /docs/rto-rpo.txt << EOF RTO (Recovery Time Objective): 4 hours RPO (Recovery Point Objective): 24 hours EOF # 8. Test RTO time bash /docs/recovery-procedure.sh # 9. Test RPO ls -l /backup/latest.tar.gz # 10. Update documentation nano /docs/recovery-procedure.txt
KOMPETENSI SUB-BAB 08
  • Mampu implementasi backup best practices
  • Mampu implementasi recovery best practices
  • Mampu test backup dan recovery
  • Mampu document recovery procedure
VOLUME 16 SELESAI

SELAMAT!

Kamu telah menyelesaikan Volume 16 - Backup & Recovery. Dari konsep backup, backup file dengan tar dan rsync, backup database, automated backup, cron job, recovery dasar, hingga best practices. Kamu sekarang menguasai Backup & Recovery di Debian Linux. Di Volume 17, kita akan dalami Advanced Topics. Sampai jumpa!
SUB-BAB8 LEVELBackup & Recovery NEXTAdvanced Topics
ABDURROZAK.MY.ID // TERHUBUNG

JARINGAN SOSIAL

Temukan saya di berbagai platform digital