280 Commits

Author SHA1 Message Date
be69c0e00f fix(ci): use actions/checkout@v4 instead of manual git clone
Some checks failed
CI/CD / Test (push) Failing after 9s
CI/CD / Generate SBOM (push) Has been skipped
CI/CD / Lint (push) Failing after 2s
CI/CD / Build (darwin-amd64) (push) Has been skipped
CI/CD / Build (linux-amd64) (push) Has been skipped
CI/CD / Build (darwin-arm64) (push) Has been skipped
CI/CD / Build (linux-arm64) (push) Has been skipped
CI/CD / Release (push) Has been skipped
CI/CD / Build & Push Docker Image (push) Has been skipped
CI/CD / Mirror to GitHub (push) Has been skipped
2026-01-06 14:01:15 +01:00
ee1f58efdb chore: ignore bin/ directory to prevent repository bloat
Some checks failed
CI/CD / Test (push) Failing after 4s
CI/CD / Generate SBOM (push) Has been skipped
CI/CD / Lint (push) Failing after 4s
CI/CD / Build (darwin-amd64) (push) Has been skipped
CI/CD / Build (linux-amd64) (push) Has been skipped
CI/CD / Build (darwin-arm64) (push) Has been skipped
CI/CD / Build (linux-arm64) (push) Has been skipped
CI/CD / Release (push) Has been skipped
CI/CD / Build & Push Docker Image (push) Has been skipped
CI/CD / Mirror to GitHub (push) Has been skipped
v3.40.0
2026-01-06 13:39:47 +01:00
5959d7313d fix(diagnose): add debug logging for WorkDir usage 2026-01-06 12:34:00 +01:00
b856d8b3f8 feat(tui): add Work Directory setting for large archive operations
- Added WorkDir to Config for custom temp directory
- TUI Settings: new 'Work Directory' option to set alternative temp location
- Restore Preview: press 'w' to toggle work directory (uses backup dir as default)
- Diagnose View: now uses configured WorkDir for cluster extraction
- Config persistence: WorkDir saved to .dbbackup.conf

This fixes diagnosis/restore failures when /tmp is too small for large archives.
Use cases: servers with limited /tmp, 70GB+ archives needing 280GB+ extraction space.
2026-01-06 11:11:22 +01:00
886aa4810a fix(diagnose): improve cluster archive diagnosis error handling
- Better error messages when tar extraction fails
- Detect truncated/corrupted archives without full extraction
- Show archive contents even when extraction fails
- Provide helpful hints for disk space and corruption issues
- Exit status 2 from tar now shows detailed diagnostics
2026-01-06 10:42:38 +01:00
14bd1f848c feat(tui): add Diagnose Backup File option to interactive menu
- Added 'Diagnose Backup File' as menu option in TUI
- Archive browser now supports 'diagnose' mode
- Allows users to run deep diagnosis on backups before restore
- Helps identify truncation/corruption issues in large backups
2026-01-06 09:44:22 +01:00
4c171c0e44 v3.40.0: Restore diagnostics and error reporting
Features:
- restore diagnose command for backup file analysis
- Deep COPY block verification for truncated dump detection
- PGDMP signature and gzip integrity validation
- Detailed error reports with --save-debug-log flag
- Ring buffer stderr capture (prevents OOM on 2M+ errors)
- Error classification with actionable recommendations

TUI Enhancements:
- Automatic dump validity safety check before restore
- Press 'd' in archive browser to diagnose backups
- Press 'd' in restore preview for debug log toggle
- Debug logs saved to /tmp on failure when enabled

Documentation:
- Updated README with diagnose command and examples
- Updated CHANGELOG with full feature list
- Updated restore preview screenshots
2026-01-05 15:17:54 +01:00
e7f0a9f5eb docs: update documentation to match current CLI syntax
- AZURE.md, GCS.md: Replace 'backup postgres' with 'backup single'
- AZURE.md, GCS.md: Replace 'restore postgres --source' with proper syntax
- AZURE.md, GCS.md: Remove non-existent --output, --source flags
- VEEAM_ALTERNATIVE.md: Fix command examples and broken link
- CONTRIBUTING.md: Remove RELEASE_NOTES step from release process
- CHANGELOG.md: Remove reference to deleted file
- Remove RELEASE_NOTES_v3.1.md (content is in CHANGELOG.md)
2026-01-05 12:41:18 +01:00
2e942f04a4 docs: remove undocumented --notify flag from README
The --notify CLI flag was documented but not implemented.
Notifications are configured via environment variables only.
2026-01-05 12:35:33 +01:00
f29e6fe102 docs: fix MYSQL_PITR.md - remove non-existent --pitr flag
Regular backups already capture binlog position automatically when
PITR is enabled at the MySQL level. No special flag needed.
2025-12-15 15:12:50 +01:00
51fc570fc7 chore: bump version to 3.2.0 across all files 2025-12-15 15:09:34 +01:00
f033b02cec fix(build): move EstimateBackupSize to platform-independent file
Some checks failed
CI/CD / Test (push) Failing after 4s
CI/CD / Generate SBOM (push) Has been skipped
CI/CD / Lint (push) Failing after 4s
CI/CD / Build (darwin-amd64) (push) Has been skipped
CI/CD / Build (linux-amd64) (push) Has been skipped
CI/CD / Build (darwin-arm64) (push) Has been skipped
CI/CD / Build (linux-arm64) (push) Has been skipped
CI/CD / Release (push) Has been skipped
CI/CD / Build & Push Docker Image (push) Has been skipped
CI/CD / Mirror to GitHub (push) Has been skipped
Fixes Windows, OpenBSD, and NetBSD builds by extracting
EstimateBackupSize from disk_check.go (which has build tags
excluding those platforms) to a new estimate.go file.
v3.2.0
2025-12-13 21:55:39 +01:00
573f2776d7 docs: fix license - Apache 2.0, not MIT 2025-12-13 21:35:36 +01:00
f7caa4baf6 docs: add Veeam alternative comparison guide 2025-12-13 21:33:57 +01:00
fbe2c691ec fix(lint): remove ineffectual assignment in LVM snapshot mount 2025-12-13 21:32:31 +01:00
dbb0f6f942 feat(engine): physical backup revolution - XtraBackup capabilities in pure Go
Why wrap external tools when you can BE the tool?

New physical backup engines:
• MySQL Clone Plugin - native 8.0.17+ physical backup
• Filesystem Snapshots - LVM/ZFS/Btrfs orchestration
• Binlog Streaming - continuous backup with seconds RPO
• Parallel Cloud Upload - stream directly to S3, skip local disk

Smart engine selection automatically picks the optimal strategy based on:
- MySQL version and edition
- Available filesystem features
- Database size
- Cloud connectivity

Zero external dependencies. Single binary. Enterprise capabilities.

Commercial backup vendors: we need to talk.
2025-12-13 21:21:17 +01:00
f69bfe7071 feat: Add enterprise DBA features for production reliability
New features implemented:

1. Backup Catalog (internal/catalog/)
   - SQLite-based backup tracking
   - Gap detection and RPO monitoring
   - Search and statistics
   - Filesystem sync

2. DR Drill Testing (internal/drill/)
   - Automated restore testing in Docker containers
   - Database validation with custom queries
   - Catalog integration for drill-tested status

3. Smart Notifications (internal/notify/)
   - Event batching with configurable intervals
   - Time-based escalation policies
   - HTML/text/Slack templates

4. Compliance Reports (internal/report/)
   - SOC2, GDPR, HIPAA, PCI-DSS, ISO27001 frameworks
   - Evidence collection from catalog
   - JSON, Markdown, HTML output formats

5. RTO/RPO Calculator (internal/rto/)
   - Recovery objective analysis
   - RTO breakdown by phase
   - Recommendations for improvement

6. Replica-Aware Backup (internal/replica/)
   - Topology detection for PostgreSQL/MySQL
   - Automatic replica selection
   - Configurable selection strategies

7. Parallel Table Backup (internal/parallel/)
   - Concurrent table dumps
   - Worker pool with progress tracking
   - Large table optimization

8. MySQL/MariaDB PITR (internal/pitr/)
   - Binary log parsing and replay
   - Point-in-time recovery support
   - Transaction filtering

CLI commands added: catalog, drill, report, rto

All changes support the goal: reliable 3 AM database recovery.
2025-12-13 20:28:55 +01:00
d0d83b61ef feat: add dry-run mode, GFS retention policies, and notifications
- Add --dry-run/-n flag for backup commands with comprehensive preflight checks
  - Database connectivity validation
  - Required tools availability check
  - Storage target and permissions verification
  - Backup size estimation
  - Encryption and cloud storage configuration validation

- Implement GFS (Grandfather-Father-Son) retention policies
  - Daily/Weekly/Monthly/Yearly tier classification
  - Configurable retention counts per tier
  - Custom weekly day and monthly day settings
  - ISO week handling for proper week boundaries

- Add notification system with SMTP and webhook support
  - SMTP email notifications with TLS/STARTTLS
  - Webhook HTTP notifications with HMAC-SHA256 signing
  - Slack-compatible webhook payload format
  - Event types: backup/restore started/completed/failed, cleanup, verify, PITR
  - Configurable severity levels and retry logic

- Update README.md with documentation for all new features
2025-12-13 19:00:54 +01:00
2becde8077 feat: add database migration between servers
- Add 'migrate cluster' command for full cluster migration
- Add 'migrate single' command for single database migration
- Support PostgreSQL and MySQL database migration
- Staged migration: backup from source → restore to target
- Pre-flight checks validate connectivity before execution
- Dry-run mode by default (--confirm to execute)
- Support for --clean, --keep-backup, --exclude options
- Parallel backup/restore with configurable jobs
- Automatic cleanup of temporary backup files
2025-12-13 18:25:28 +01:00
1ccfdbcf52 ci: add mirror job to push to GitHub 2025-12-13 16:30:11 +00:00
11f3204b85 ci: add mirror job to push to GitHub 2025-12-13 16:29:54 +00:00
b206441a4a fix: Add cross-compilation and fix QEMU ARM64 compatibility
- Added --platform=$BUILDPLATFORM to builder stage for cross-compilation
- Added TARGETOS and TARGETARCH build args
- Pinned Alpine to 3.19 for better QEMU emulation stability
- Split apk add commands to prevent trigger failures under QEMU
- Fixes ARM64 build failures in CI/CD pipeline
2025-12-13 09:45:25 +00:00
0eed4e0e92 ci: trigger pipeline 2025-12-13 10:22:17 +01:00
358031ac21 ci: trigger pipeline 2025-12-13 10:16:30 +01:00
8a1b3a7622 docs: rewrite README with conservative style
- Remove emoticons and bloated content
- Clean professional documentation
- Include all TUI screenshots
- Match actual application features
- Reduce from 1537 to ~380 lines
2025-12-13 09:58:54 +01:00
e23b3c9388 ci: trigger pipeline 2025-12-13 09:45:02 +01:00
b45720a547 Clean up README.md for conservative style
- Update repository URL to git.uuxo.net/UUXO/dbbackup (main)
- Add GitHub mirror reference
- Remove all emojis and icons for professional appearance
- Fix section order: Recent Improvements, Contributing, Support, License
- Remove duplicate Support/License sections
- Clean up output examples (remove emoji decorations)
2025-12-12 14:33:37 +01:00
3afb0dbce2 Fix build_all.sh: replace 'env' command with direct export
- The 'env GOOS=x GOARCH=y command' syntax fails on some systems
- Using 'export GOOS GOARCH' before go build for better compatibility
- Updated version to 3.1.0
- All 10 platform builds now succeed
2025-12-12 13:57:10 +01:00
9dfb5e37cf Fix cluster backup auto-confirm and confirmation Init
- Skip confirmation dialog in auto-confirm mode for cluster backup
- Call confirm.Init() to trigger auto-confirm message
2025-12-12 13:19:27 +01:00
d710578c48 Fix MySQL support and TUI auto-confirm mode
- Fix format detection to read database_type from .meta.json metadata file
- Add ensureMySQLDatabaseExists() for MySQL/MariaDB database creation
- Route database creation to correct implementation based on db type
- Add TUI auto-forward in auto-confirm mode (no input required for debugging)
- All TUI components now exit automatically when --auto-confirm is set
- Fix status view to skip loading in auto-confirm mode
2025-12-12 12:38:20 +01:00
5536b797a4 ci: skip docker push if registry secrets not configured 2025-12-11 21:22:08 +01:00
4ab28c7b2e ci: test runner 2025-12-11 20:31:20 +01:00
9634f3a562 ci: limit parallelism to 8 threads (GOMAXPROCS + max-parallel) 2025-12-11 20:16:30 +01:00
bd37c015ea ci: add Docker build and push to Gitea registry 2025-12-11 20:00:46 +01:00
4f0a7ab2ec ci: remove Windows builds - who needs that anyway 2025-12-11 19:44:30 +01:00
c2a0a89131 fix: resolve go vet linting issues
- Add WithField and WithFields methods to NullLogger to implement Logger interface
- Change MenuModel to use pointer receivers to avoid copying sync.Once
2025-12-11 19:32:17 +01:00
abb23ce056 fix: use single package build instead of ./... 2025-12-11 19:15:49 +01:00
914307ac8f ci: add golangci-lint config and fix formatting
- Add .golangci.yml with minimal linters (govet, ineffassign)
- Run gofmt -s and goimports on all files to fix formatting
- Disable fieldalignment and copylocks checks in govet
2025-12-11 17:53:28 +01:00
6b66ae5429 ci: use go install for golangci-lint instead of curl script 2025-12-11 17:43:46 +01:00
4be8a96699 fix: trust .dump extension when file doesn't exist in DetectArchiveFormat
The format detection now returns PostgreSQL Dump format for .dump files
when the file cannot be opened (e.g., when just checking filename pattern),
instead of falling back to SQL format.

This fixes the test that passes just a filename string without an actual file.
2025-12-11 17:39:19 +01:00
54a0dcaff1 fix: add missing WithField and WithFields methods to NullLogger
NullLogger now fully implements the Logger interface by adding:
- WithField(key string, value interface{}) Logger
- WithFields(fields map[string]interface{}) Logger

Both methods return the same NullLogger instance (no-op behavior),
which is appropriate for a null logger used in testing.
2025-12-11 17:05:19 +01:00
6fa967f367 ci: upgrade to Go 1.24 (required by go.mod) 2025-12-11 15:28:49 +01:00
fc1bb38ef5 ci: use public Gitea URL (https://git.uuxo.net) for checkout 2025-12-11 15:09:42 +01:00
d2212ea89c ci: use git clone instead of actions/checkout (no Node.js needed) 2025-12-11 15:07:36 +01:00
baf36760b1 ci: fix YAML syntax error (duplicate with) 2025-12-11 15:05:19 +01:00
0bde99f1aa ci: trigger 15:03:37 2025-12-11 15:03:37 +01:00
73b3a4c652 ci: test after db schema fix 2025-12-11 15:01:39 +01:00
4ac0cc0606 ci: retrigger workflow 2025-12-11 14:56:53 +01:00
56688fbd76 ci: use shallow clone (fetch-depth: 1) for faster checkout 2025-12-11 14:51:21 +01:00
3bbfaa2766 ci: trigger workflow 2025-12-11 13:43:28 +01:00