Salin dan Bagikan
Cara Backup dan Restore Data dengan Benar - Panduan lengkap backup dan restore data untuk melindungi file penting Anda

Cara Backup dan Restore Data dengan Benar

Backup data adalah hal critical yang sering diabaikan. Mari pelajari strategi backup yang efektif.

Strategi Backup

3-2-1 Rule

3 - Simpan 3 copies data
2 - Di 2 media berbeda
1 - 1 copy di offsite/cloud

Contoh:
1. Original di laptop
2. External hard drive
3. Cloud storage

Jenis Backup

Full Backup:
- Backup semua data
- Waktu lama, storage besar
- Restore cepat dan mudah

Incremental Backup:
- Backup perubahan sejak backup terakhir
- Waktu cepat, storage kecil
- Restore: butuh full + semua incremental

Differential Backup:
- Backup perubahan sejak full backup terakhir
- Medium time, medium storage
- Restore: full + latest differential

Backup di Linux

# Basic rsync
rsync -av source/ destination/

# With progress
rsync -av --progress source/ destination/

# Delete files yang tidak ada di source
rsync -av --delete source/ destination/

# Exclude files/folders
rsync -av --exclude='*.tmp' --exclude='node_modules' source/ destination/

# To remote server
rsync -avz -e ssh source/ user@server:/path/destination/

# Dry run (test tanpa execute)
rsync -av --dry-run source/ destination/

Rsync Backup Script

#!/bin/bash
# backup.sh

# Variables
SOURCE="/home/user/Documents"
DEST="/mnt/backup/Documents"
DATE=$(date +%Y%m%d_%H%M%S)
LOG="/var/log/backup_$DATE.log"

# Create backup
echo "Starting backup at $(date)" | tee -a $LOG
rsync -av --delete --exclude='*.tmp' --exclude='.cache' \
    $SOURCE/ $DEST/ 2>&1 | tee -a $LOG

# Check result
if [ $? -eq 0 ]; then
    echo "Backup completed successfully at $(date)" | tee -a $LOG
else
    echo "Backup failed at $(date)" | tee -a $LOG
    # Send notification (optional)
    # mail -s "Backup Failed" admin@example.com < $LOG
fi

Tar Backup

# Create tar archive
tar -cvf backup.tar /path/to/folder

# Create compressed tar.gz
tar -czvf backup.tar.gz /path/to/folder

# Create with date
tar -czvf backup_$(date +%Y%m%d).tar.gz /home/user/Documents

# Extract
tar -xzvf backup.tar.gz

# Extract to specific directory
tar -xzvf backup.tar.gz -C /path/to/destination

# List contents
tar -tzvf backup.tar.gz

Tar Backup Script

#!/bin/bash
# tar-backup.sh

SOURCE="/home/user/Documents"
DEST="/mnt/backup"
DATE=$(date +%Y%m%d)
FILENAME="backup_$DATE.tar.gz"

# Create backup
tar -czvf $DEST/$FILENAME $SOURCE

# Keep only last 7 days
find $DEST -name "backup_*.tar.gz" -mtime +7 -delete

echo "Backup created: $FILENAME"

Database Backup

MySQL/MariaDB

# Single database
mysqldump -u root -p database_name > backup.sql

# All databases
mysqldump -u root -p --all-databases > all_backup.sql

# With compression
mysqldump -u root -p database_name | gzip > backup.sql.gz

# Restore
mysql -u root -p database_name < backup.sql

# Restore from gzip
gunzip < backup.sql.gz | mysql -u root -p database_name

MySQL Backup Script

#!/bin/bash
# mysql-backup.sh

DB_USER="backup_user"
DB_PASS="password"
BACKUP_DIR="/mnt/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)

# Get all databases
DATABASES=$(mysql -u $DB_USER -p$DB_PASS -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)")

# Backup each database
for DB in $DATABASES; do
    echo "Backing up $DB..."
    mysqldump -u $DB_USER -p$DB_PASS --single-transaction $DB | gzip > $BACKUP_DIR/${DB}_${DATE}.sql.gz
done

# Remove backups older than 7 days
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete

echo "Backup completed"

PostgreSQL

# Single database
pg_dump database_name > backup.sql
pg_dump -U username database_name > backup.sql

# All databases
pg_dumpall > all_backup.sql

# Custom format (compressed)
pg_dump -Fc database_name > backup.dump

# Restore SQL
psql -U username database_name < backup.sql

# Restore custom format
pg_restore -U username -d database_name backup.dump

MongoDB

# Backup all databases
mongodump --out /backup/mongodb/

# Backup specific database
mongodump --db database_name --out /backup/mongodb/

# With authentication
mongodump --uri="mongodb://user:pass@localhost:27017/database" --out /backup/

# Restore
mongorestore /backup/mongodb/

# Restore specific database
mongorestore --db database_name /backup/mongodb/database_name/

Cloud Backup

Rclone Setup

# Install rclone
curl https://rclone.org/install.sh | sudo bash

# Configure
rclone config

# Add remote (Google Drive example)
# n) New remote
# name> gdrive
# Storage> drive
# Follow OAuth prompts

# List remotes
rclone listremotes

Rclone Commands

# List files
rclone ls gdrive:/backup

# Copy to cloud
rclone copy /local/path gdrive:/backup/path

# Sync (mirror)
rclone sync /local/path gdrive:/backup/path

# With progress
rclone copy /local/path gdrive:/backup/path --progress

# Backup script
#!/bin/bash
BACKUP_DIR="/home/user/Documents"
REMOTE="gdrive:/Backups/Documents"

rclone sync $BACKUP_DIR $REMOTE --progress --log-file=/var/log/rclone.log

Google Drive dengan grive2

# Install
sudo apt install grive2

# First time setup (di folder yang mau sync)
cd ~/GoogleDrive
grive -a

# Sync
grive

# Selective sync
grive --dir Documents

Automated Backup dengan Cron

Setup Cron Jobs

# Edit crontab
crontab -e

# Daily backup at 2 AM
0 2 * * * /home/user/scripts/backup.sh

# Weekly full backup (Sunday 3 AM)
0 3 * * 0 /home/user/scripts/full-backup.sh

# Monthly backup (1st day, 4 AM)
0 4 1 * * /home/user/scripts/monthly-backup.sh

# Database backup every 6 hours
0 */6 * * * /home/user/scripts/db-backup.sh

Cron Format

* * * * * command
│ │ │ │ │
│ │ │ │ └── Day of week (0-7, Sunday = 0 or 7)
│ │ │ └──── Month (1-12)
│ │ └────── Day of month (1-31)
│ └──────── Hour (0-23)
└────────── Minute (0-59)

Backup Tools GUI

Timeshift (System Backup)

# Install
sudo apt install timeshift

# Create snapshot
sudo timeshift --create --comments "Before upgrade"

# List snapshots
sudo timeshift --list

# Restore
sudo timeshift --restore

Deja Dup (GNOME)

# Install
sudo apt install deja-dup

# Features:
# - Simple GUI
# - Scheduled backups
# - Encryption
# - Cloud support

Restic (Modern Backup)

# Install
sudo apt install restic

# Initialize repository
restic init --repo /mnt/backup/restic-repo

# Create backup
restic -r /mnt/backup/restic-repo backup /home/user/Documents

# List snapshots
restic -r /mnt/backup/restic-repo snapshots

# Restore
restic -r /mnt/backup/restic-repo restore latest --target /restore/path

# Forget old snapshots
restic -r /mnt/backup/restic-repo forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6

Verify Backup

Test Restore

# ALWAYS test your backups!

# Test tar archive
tar -tzf backup.tar.gz > /dev/null && echo "Archive OK" || echo "Archive corrupted"

# Test SQL backup
mysql -u root -p test_restore_db < backup.sql
# Verify data, then drop test database

# Test rsync backup
rsync -avnc source/ destination/  # -n = dry run, -c = checksum

Checksum Verification

# Create checksum
md5sum backup.tar.gz > backup.tar.gz.md5
sha256sum backup.tar.gz > backup.tar.gz.sha256

# Verify checksum
md5sum -c backup.tar.gz.md5
sha256sum -c backup.tar.gz.sha256

Restore Best Practices

Before Restore

1. Verify backup integrity
2. Identify what needs to be restored
3. Stop services yang affected
4. Create backup of current state
5. Plan rollback strategy

Restore Checklist

# 1. Stop services
sudo systemctl stop nginx
sudo systemctl stop mysql

# 2. Backup current state
tar -czvf pre-restore-backup.tar.gz /path/to/current

# 3. Restore
tar -xzvf backup.tar.gz -C /path/to/destination

# 4. Fix permissions if needed
chown -R www-data:www-data /var/www/html

# 5. Start services
sudo systemctl start mysql
sudo systemctl start nginx

# 6. Verify
curl localhost  # Test website
mysql -e "SELECT 1"  # Test database

Backup Checklist

What to Backup

Critical:
 Documents and files
 Database data
 Configuration files
 SSH keys
 Certificates/SSL
 Application data
 Email data

System:
 /etc (configurations)
 /home (user data)
 /var/www (web files)
 /var/lib (app data)

Development:
 Source code (also use Git!)
 Environment files
 Database dumps
 Docker volumes

Weekly Review

□ Check backup logs
□ Verify backup file sizes
□ Test restore procedure
□ Review backup retention
□ Check storage space
□ Update backup scripts if needed

Kesimpulan

Backup adalah investasi waktu yang akan menyelamatkan Anda saat disaster. Ikuti 3-2-1 rule dan SELALU test restore secara berkala.

Artikel Terkait

Link Postingan : https://www.tirinfo.com/cara-backup-restore-data/

Hendra WIjaya
Tirinfo
5 minutes.
7 January 2026