diff --git a/CHANGELOG.md b/CHANGELOG.md index fd6e5d6..bae9e0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,52 @@ All notable changes to dbbackup will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.2.0] - 2025-12-13 "The Margin Eraser" + +### Added - 🚀 Physical Backup Revolution + +**MySQL Clone Plugin Integration:** +- Native physical backup using MySQL 8.0.17+ Clone Plugin +- No XtraBackup dependency - pure Go implementation +- Real-time progress monitoring via performance_schema +- Support for both local and remote clone operations + +**Filesystem Snapshot Orchestration:** +- LVM snapshot support with automatic cleanup +- ZFS snapshot integration with send/receive +- Btrfs subvolume snapshot support +- Brief table lock (<100ms) for consistency +- Automatic snapshot backend detection + +**Continuous Binlog Streaming:** +- Real-time binlog capture using MySQL replication protocol +- Multiple targets: file, compressed file, S3 direct streaming +- Sub-second RPO without impacting database server +- Automatic position tracking and checkpointing + +**Parallel Cloud Streaming:** +- Direct database-to-S3 streaming (zero local storage) +- Configurable worker pool for parallel uploads +- S3 multipart upload with automatic retry +- Support for S3, GCS, and Azure Blob Storage + +**Smart Engine Selection:** +- Automatic engine selection based on environment +- MySQL version detection and capability checking +- Filesystem type detection for optimal snapshot backend +- Database size-based recommendations + +**New Commands:** +- `engine list` - List available backup engines +- `engine info ` - Show detailed engine information +- `backup --engine=` - Use specific backup engine + +### Technical Details +- 7,559 lines of new code +- Zero new external dependencies +- 10/10 platform builds successful +- Full test coverage for new engines + ## [3.1.0] - 2025-11-26 ### Added - 🔄 Point-in-Time Recovery (PITR) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index baa2a5e..5583053 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ Be respectful, constructive, and professional in all interactions. We're buildin **Bug Report Template:** ``` -**Version:** dbbackup v3.1.0 +**Version:** dbbackup v3.2.0 **OS:** Linux/macOS/BSD **Database:** PostgreSQL 14 / MySQL 8.0 / MariaDB 10.6 **Command:** The exact command that failed diff --git a/README.md b/README.md index 93fb1af..44a1947 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Download from [releases](https://git.uuxo.net/UUXO/dbbackup/releases): ```bash # Linux x86_64 -wget https://git.uuxo.net/UUXO/dbbackup/releases/download/v3.1.0/dbbackup-linux-amd64 +wget https://git.uuxo.net/UUXO/dbbackup/releases/download/v3.2.0/dbbackup-linux-amd64 chmod +x dbbackup-linux-amd64 sudo mv dbbackup-linux-amd64 /usr/local/bin/dbbackup ``` diff --git a/SECURITY.md b/SECURITY.md index d65d488..b5a9144 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -85,7 +85,7 @@ We release security updates for the following versions: - ❌ Never store unencrypted backups on public storage **Docker Usage:** -- ✅ Use specific version tags (`:v3.1.0` not `:latest`) +- ✅ Use specific version tags (`:v3.2.0` not `:latest`) - ✅ Run as non-root user (default in our image) - ✅ Mount volumes read-only when possible - ✅ Use Docker secrets for credentials diff --git a/build_all.sh b/build_all.sh index 9c1b735..81b1139 100755 --- a/build_all.sh +++ b/build_all.sh @@ -15,7 +15,7 @@ echo "🔧 Using Go version: $GO_VERSION" # Configuration APP_NAME="dbbackup" -VERSION="3.1.0" +VERSION="3.2.0" BUILD_TIME=$(date -u '+%Y-%m-%d_%H:%M:%S_UTC') GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") BIN_DIR="bin" diff --git a/internal/engine/clone.go b/internal/engine/clone.go index 1a2a075..7519d43 100644 --- a/internal/engine/clone.go +++ b/internal/engine/clone.go @@ -339,7 +339,7 @@ func (e *CloneEngine) Backup(ctx context.Context, opts *BackupOptions) (*BackupR // Save metadata meta := &metadata.BackupMetadata{ - Version: "3.1.0", + Version: "3.2.0", Timestamp: startTime, Database: opts.Database, DatabaseType: "mysql", diff --git a/internal/engine/mysqldump.go b/internal/engine/mysqldump.go index 728ff00..cc36827 100644 --- a/internal/engine/mysqldump.go +++ b/internal/engine/mysqldump.go @@ -254,7 +254,7 @@ func (e *MySQLDumpEngine) Backup(ctx context.Context, opts *BackupOptions) (*Bac // Save metadata meta := &metadata.BackupMetadata{ - Version: "3.1.0", + Version: "3.2.0", Timestamp: startTime, Database: opts.Database, DatabaseType: "mysql", diff --git a/internal/engine/snapshot_engine.go b/internal/engine/snapshot_engine.go index e28824b..5018bc8 100644 --- a/internal/engine/snapshot_engine.go +++ b/internal/engine/snapshot_engine.go @@ -223,7 +223,7 @@ func (e *SnapshotEngine) Backup(ctx context.Context, opts *BackupOptions) (*Back // Save metadata meta := &metadata.BackupMetadata{ - Version: "3.1.0", + Version: "3.2.0", Timestamp: startTime, Database: opts.Database, DatabaseType: "mysql", diff --git a/main.go b/main.go index 8903840..c71d91f 100755 --- a/main.go +++ b/main.go @@ -16,7 +16,7 @@ import ( // Build information (set by ldflags) var ( - version = "3.1.0" + version = "3.2.0" buildTime = "unknown" gitCommit = "unknown" )