- Add SHA-256 checksum generation for all backups - Implement verify-backup command for integrity validation - Add JSON metadata format (.meta.json) with full backup info - Create retention policy engine with smart cleanup - Add cleanup command with dry-run and pattern matching - Integrate metadata generation into backup flow - Maintain backward compatibility with legacy .info files New commands: - dbbackup verify-backup [files] - Verify backup integrity - dbbackup cleanup [dir] - Clean old backups with retention policy New packages: - internal/metadata - Backup metadata management - internal/verification - Checksum validation - internal/retention - Retention policy engine
12 KiB
dbbackup Version 2.0 Roadmap
Current Status: v1.1 (Production Ready)
- ✅ 24/24 automated tests passing (100%)
- ✅ PostgreSQL, MySQL, MariaDB support
- ✅ Interactive TUI + CLI
- ✅ Cluster backup/restore
- ✅ Docker support
- ✅ Cross-platform binaries
Version 2.0 Vision: Enterprise-Grade Features
Transform dbbackup into an enterprise-ready backup solution with cloud storage, incremental backups, PITR, and encryption.
Target Release: Q2 2026 (3-4 months)
Priority Matrix
HIGH IMPACT
│
┌────────────────────┼────────────────────┐
│ │ │
│ Cloud Storage ⭐ │ Incremental ⭐⭐⭐ │
│ Verification │ PITR ⭐⭐⭐ │
│ Retention │ Encryption ⭐⭐ │
LOW │ │ │ HIGH
EFFORT ─────────────────┼──────────────────── EFFORT
│ │ │
│ Metrics │ Web UI (optional) │
│ Remote Restore │ Replication Slots │
│ │ │
└────────────────────┼────────────────────┘
│
LOW IMPACT
Development Phases
Phase 1: Foundation (Weeks 1-4)
Sprint 1: Verification & Retention (2 weeks)
Goals:
- Backup integrity verification with SHA-256 checksums
- Automated retention policy enforcement
- Structured backup metadata
Features:
- ✅ Generate SHA-256 checksums during backup
- ✅ Verify backups before/after restore
- ✅ Automatic cleanup of old backups
- ✅ Retention policy: days + minimum count
- ✅ Backup metadata in JSON format
Deliverables:
# New commands
dbbackup verify backup.dump
dbbackup cleanup --retention-days 30 --min-backups 5
# Metadata format
{
"version": "2.0",
"timestamp": "2026-01-15T10:30:00Z",
"database": "production",
"size_bytes": 1073741824,
"sha256": "abc123...",
"db_version": "PostgreSQL 15.3",
"compression": "gzip-9"
}
Implementation:
internal/verification/- Checksum calculation and validationinternal/retention/- Policy enforcementinternal/metadata/- Backup metadata management
Sprint 2: Cloud Storage (2 weeks)
Goals:
- Upload backups to cloud storage
- Support multiple cloud providers
- Download and restore from cloud
Providers:
- ✅ AWS S3
- ✅ MinIO (S3-compatible)
- ✅ Backblaze B2
- ✅ Azure Blob Storage (optional)
- ✅ Google Cloud Storage (optional)
Configuration:
[cloud]
enabled = true
provider = "s3" # s3, minio, azure, gcs, b2
auto_upload = true
[cloud.s3]
bucket = "db-backups"
region = "us-east-1"
endpoint = "s3.amazonaws.com" # Custom for MinIO
access_key = "..." # Or use IAM role
secret_key = "..."
New Commands:
# Upload existing backup
dbbackup cloud upload backup.dump
# List cloud backups
dbbackup cloud list
# Download from cloud
dbbackup cloud download backup_id
# Restore directly from cloud
dbbackup restore single s3://bucket/backup.dump --target mydb
Dependencies:
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
"cloud.google.com/go/storage"
Phase 2: Advanced Backup (Weeks 5-10)
Sprint 3: Incremental Backups (3 weeks)
Goals:
- Reduce backup time and storage
- File-level incremental for PostgreSQL
- Binary log incremental for MySQL
PostgreSQL Strategy:
Full Backup (Base)
├─ Incremental 1 (changed files since base)
├─ Incremental 2 (changed files since inc1)
└─ Incremental 3 (changed files since inc2)
MySQL Strategy:
Full Backup
├─ Binary Log 1 (changes since full)
├─ Binary Log 2
└─ Binary Log 3
Implementation:
# Create base backup
dbbackup backup single mydb --mode full
# Create incremental
dbbackup backup single mydb --mode incremental
# Restore (automatically applies incrementals)
dbbackup restore single backup.dump --apply-incrementals
File Structure:
backups/
├── mydb_full_20260115.dump
├── mydb_full_20260115.meta
├── mydb_incr_20260116.dump # Contains only changes
├── mydb_incr_20260116.meta # Points to base: mydb_full_20260115
└── mydb_incr_20260117.dump
Sprint 4: Security & Encryption (2 weeks)
Goals:
- Encrypt backups at rest
- Secure key management
- Encrypted cloud uploads
Features:
- ✅ AES-256-GCM encryption
- ✅ Argon2 key derivation
- ✅ Multiple key sources (file, env, vault)
- ✅ Encrypted metadata
Configuration:
[encryption]
enabled = true
algorithm = "aes-256-gcm"
key_file = "/etc/dbbackup/encryption.key"
# Or use environment variable
# DBBACKUP_ENCRYPTION_KEY=base64key...
Commands:
# Generate encryption key
dbbackup keys generate
# Encrypt existing backup
dbbackup encrypt backup.dump
# Decrypt backup
dbbackup decrypt backup.dump.enc
# Automatic encryption
dbbackup backup single mydb --encrypt
File Format:
+------------------+
| Encryption Header| (IV, algorithm, key ID)
+------------------+
| Encrypted Data | (AES-256-GCM)
+------------------+
| Auth Tag | (HMAC for integrity)
+------------------+
Sprint 5: Point-in-Time Recovery - PITR (4 weeks)
Goals:
- Restore to any point in time
- WAL archiving for PostgreSQL
- Binary log archiving for MySQL
PostgreSQL Implementation:
[pitr]
enabled = true
wal_archive_dir = "/backups/wal_archive"
wal_retention_days = 7
# PostgreSQL config (auto-configured by dbbackup)
# archive_mode = on
# archive_command = '/usr/local/bin/dbbackup archive-wal %p %f'
Commands:
# Enable PITR
dbbackup pitr enable
# Archive WAL manually
dbbackup archive-wal /var/lib/postgresql/pg_wal/000000010000000000000001
# Restore to point-in-time
dbbackup restore single backup.dump \
--target-time "2026-01-15 14:30:00" \
--target mydb
# Show available restore points
dbbackup pitr timeline
WAL Archive Structure:
wal_archive/
├── 000000010000000000000001
├── 000000010000000000000002
├── 000000010000000000000003
└── timeline.json
MySQL Implementation:
# Archive binary logs
dbbackup binlog archive --start-datetime "2026-01-15 00:00:00"
# PITR restore
dbbackup restore single backup.sql \
--target-time "2026-01-15 14:30:00" \
--apply-binlogs
Phase 3: Enterprise Features (Weeks 11-16)
Sprint 6: Observability & Integration (3 weeks)
Features:
- Prometheus Metrics
# Exposed metrics
dbbackup_backup_duration_seconds
dbbackup_backup_size_bytes
dbbackup_backup_success_total
dbbackup_restore_duration_seconds
dbbackup_last_backup_timestamp
dbbackup_cloud_upload_duration_seconds
Endpoint:
# Start metrics server
dbbackup metrics serve --port 9090
# Scrape endpoint
curl http://localhost:9090/metrics
- Remote Restore
# Restore to remote server
dbbackup restore single backup.dump \
--remote-host db-replica-01 \
--remote-user postgres \
--remote-port 22 \
--confirm
- Replication Slots (PostgreSQL)
# Create replication slot for continuous WAL streaming
dbbackup replication create-slot backup_slot
# Stream WALs via replication
dbbackup replication stream backup_slot
- Webhook Notifications
[notifications]
enabled = true
webhook_url = "https://slack.com/webhook/..."
notify_on = ["backup_complete", "backup_failed", "restore_complete"]
Technical Architecture
New Directory Structure
internal/
├── cloud/ # Cloud storage backends
│ ├── interface.go
│ ├── s3.go
│ ├── azure.go
│ └── gcs.go
├── encryption/ # Encryption layer
│ ├── aes.go
│ ├── keys.go
│ └── vault.go
├── incremental/ # Incremental backup engine
│ ├── postgres.go
│ └── mysql.go
├── pitr/ # Point-in-time recovery
│ ├── wal.go
│ ├── binlog.go
│ └── timeline.go
├── verification/ # Backup verification
│ ├── checksum.go
│ └── validate.go
├── retention/ # Retention policy
│ └── cleanup.go
├── metrics/ # Prometheus metrics
│ └── exporter.go
└── replication/ # Replication management
└── slots.go
Required Dependencies
// Cloud storage
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
"cloud.google.com/go/storage"
// Encryption
"crypto/aes"
"crypto/cipher"
"golang.org/x/crypto/argon2"
// Metrics
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
// PostgreSQL replication
"github.com/jackc/pgx/v5/pgconn"
// Fast file scanning for incrementals
"github.com/karrick/godirwalk"
Testing Strategy
v2.0 Test Coverage Goals
- Minimum 90% code coverage
- Integration tests for all cloud providers
- End-to-end PITR scenarios
- Performance benchmarks for incremental backups
- Encryption/decryption validation
- Multi-database restore tests
New Test Suites
# Cloud storage tests
./run_qa_tests.sh --suite cloud
# Incremental backup tests
./run_qa_tests.sh --suite incremental
# PITR tests
./run_qa_tests.sh --suite pitr
# Encryption tests
./run_qa_tests.sh --suite encryption
# Full v2.0 suite
./run_qa_tests.sh --suite v2
Migration Path
v1.x → v2.0 Compatibility
- ✅ All v1.x backups readable in v2.0
- ✅ Configuration auto-migration
- ✅ Metadata format upgrade
- ✅ Backward-compatible commands
Deprecation Timeline
- v2.0: Warning for old config format
- v2.1: Full migration required
- v3.0: Old format no longer supported
Documentation Updates
New Docs
CLOUD.md- Cloud storage configurationINCREMENTAL.md- Incremental backup guidePITR.md- Point-in-time recoveryENCRYPTION.md- Encryption setupMETRICS.md- Prometheus integration
Success Metrics
v2.0 Goals
- 🎯 95%+ test coverage
- 🎯 Support 1TB+ databases with incrementals
- 🎯 PITR with <5 minute granularity
- 🎯 Cloud upload/download >100MB/s
- 🎯 Encryption overhead <10%
- 🎯 Full compatibility with pgBackRest for PostgreSQL
- 🎯 Industry-leading MySQL PITR solution
Release Schedule
- v2.0-alpha (End Sprint 3): Cloud + Verification
- v2.0-beta (End Sprint 5): + Incremental + PITR
- v2.0-rc1 (End Sprint 6): + Enterprise features
- v2.0 GA (Q2 2026): Production release
What Makes v2.0 Unique
After v2.0, dbbackup will be:
✅ Only multi-database tool with full PITR support
✅ Best-in-class UX (TUI + CLI + Docker + K8s)
✅ Feature parity with pgBackRest (PostgreSQL)
✅ Superior to mysqldump with incremental + PITR
✅ Cloud-native with multi-provider support
✅ Enterprise-ready with encryption + metrics
✅ Zero-config for 80% of use cases
Contributing
Want to contribute to v2.0? Check out:
Questions?
Open an issue or start a discussion:
- Issues: https://git.uuxo.net/uuxo/dbbackup/issues
- Discussions: https://git.uuxo.net/uuxo/dbbackup/discussions
Next Step: Sprint 1 - Backup Verification & Retention (January 2026)