| name | backup |
| version | 0.1.0 |
| author | devclaw |
| description | Backup and restore — files, databases, and system backups |
| category | system |
| tags | ["backup","restore","archive","recovery","sync"] |
| requires | {"bins":["rsync","tar"]} |
Backup
Backup and restore files, databases, and systems.
Setup
Base tools (often pre-installed):
- macOS: rsync, tar included; for DB tools:
brew install postgresql mysql (pg_dump, mysqldump), brew install mongodb/brew/mongodb-database-tools (mongodump)
- Ubuntu:
sudo apt install rsync (tar usually included), sudo apt install postgresql-client default-mysql-client mongodb-database-tools for DB backups
Cloud: rclone config for multi-cloud; aws configure for S3.
File Backups
rsync (Incremental)
rsync -av /source/ /backup/
rsync -av --progress /source/ /backup/
rsync -av --exclude 'node_modules' --exclude '.git' --exclude '*.log' /source/ /backup/
rsync -avz -e ssh /source/ user@remote:/backup/
rsync -av --delete /source/ /backup/
rsync -av --dry-run /source/ /backup/
rsync -av --backup --backup-dir=/backup/$(date +%Y%m%d) /source/ /backup/current/
tar Archives
tar -czvf backup.tar.gz /path/to/backup/
tar -czvf backup.tar.gz --exclude='*.log' --exclude='node_modules' /path/
tar -czvf - /path/ | split -b 1G - backup.tar.gz.
tar -tzvf backup.tar.gz
tar -xzvf backup.tar.gz -C /destination/
tar --create --file=backup.tar --listed-incremental=backup.snar /path/
Database Backups
PostgreSQL
pg_dump -h localhost -U user dbname > backup.sql
pg_dump -h localhost -U user dbname | gzip > backup.sql.gz
pg_dumpall -U postgres > all_databases.sql
pg_dump -h localhost -U user -Fc dbname > backup.dump
psql -h localhost -U user dbname < backup.sql
pg_restore -h localhost -U user -d dbname backup.dump
MySQL
mysqldump -u user -p dbname > backup.sql
mysqldump -u user -p --all-databases > all_databases.sql
mysqldump -u user -p dbname | gzip > backup.sql.gz
mysqldump -u user -p dbname table1 table2 > tables.sql
mysql -u user -p dbname < backup.sql
MongoDB
mongodump --uri="mongodb://user:pass@host/dbname" --out=backup/
mongodump --uri="mongodb://host/dbname" --collection=users --out=backup/
mongorestore --uri="mongodb://host/dbname" backup/dbname/
mongoexport --uri="mongodb://host/dbname" --collection=users --out=users.json
Automated Backups
Cron Job
crontab -e
0 2 * * * rsync -av /source/ /backup/ >> /var/log/backup.log 2>&1
0 3 * * 0 tar -czvf /backup/weekly-$(date +\%Y\%m\%d).tar.gz /source/
0 4 1 * * pg_dump -U user dbname | gzip > /backup/db-$(date +\%Y\%m).sql.gz
Backup Script
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/$DATE"
SOURCE="/data"
mkdir -p "$BACKUP_DIR"
rsync -av "$SOURCE/" "$BACKUP_DIR/files/"
pg_dump -U user mydb | gzip > "$BACKUP_DIR/database.sql.gz"
find /backup -type d -mtime +7 -exec rm -rf {} \;
echo "Backup completed: $BACKUP_DIR"
Cloud Backup
AWS S3
aws s3 sync /local/ s3://bucket/backup/
aws s3 sync /local/ s3://bucket/backup/ --storage-class GLACIER
aws s3 sync s3://bucket/backup/ /local/
rclone (Multi-cloud)
rclone config
rclone sync /local/ gdrive:backup/
rclone sync /local/ dropbox:backup/
rclone sync /local/ crypt:backup/
Tips
- Use
--dry-run before running backups
- Test restore procedures regularly
- Keep multiple backup generations
- Encrypt sensitive backups
- Store offsite or in cloud
Triggers
backup, restore, rsync, database backup, file backup,
pg_dump, mysqldump, archive