Incremental backups using BC API's lastModifiedDateTime filter to only
export records changed since the last successful run. Runs every 15
minutes via cron, with a daily full backup for complete snapshots.
bc-export.ps1:
- Add -SinceDateTime parameter for incremental filtering
- Append $filter=lastModifiedDateTime gt {timestamp} to all entity URLs
- Exit code 2 when no records changed (skip archive/upload)
- Record mode and sinceDateTime in export-metadata.json
bc-backup.sh:
- Accept --mode full|incremental flag (default: incremental)
- State file (last-run-state.json) tracks last successful run timestamp
- Auto-fallback to full when no state file exists
- Skip archive/encrypt/upload when incremental finds 0 changes
- Lock file (.backup.lock) prevents overlapping cron runs
- S3 keys organized by mode: backups/full/ vs backups/incremental/
bc-cleanup.sh (new):
- Lists all S3 objects under backups/ prefix
- Deletes objects older than RETENTION_DAYS (default 30)
- Handles pagination for large buckets
- Gracefully handles COMPLIANCE-locked objects
bc-backup.conf.template:
- Add BACKUP_MODE_DEFAULT option
cron-examples.txt:
- Recommended setup: 15-min incremental + daily full + daily cleanup
- Alternative schedules (30-min, hourly)
- Systemd timer examples
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
39 lines
452 B
Plaintext
39 lines
452 B
Plaintext
# Business Central Backup - Git Ignore File
|
|
# Prevents sensitive data from being committed to version control
|
|
|
|
# Configuration file with secrets
|
|
bc-backup.conf
|
|
|
|
# Log files
|
|
logs/
|
|
*.log
|
|
|
|
# Temporary files
|
|
temp/
|
|
*.bacpac
|
|
*.gpg
|
|
*.tmp
|
|
|
|
# Runtime state and lock files
|
|
last-run-state.json
|
|
.backup.lock
|
|
|
|
# Backup downloads
|
|
backups/
|
|
*.bak
|
|
|
|
# System files
|
|
.DS_Store
|
|
Thumbs.db
|
|
*~
|
|
|
|
# IDE files
|
|
.vscode/
|
|
.idea/
|
|
*.swp
|
|
*.swo
|
|
|
|
# Environment variables
|
|
.env
|
|
.env.local
|