Commit Graph

7 Commits

Author SHA1 Message Date
e581f0a357 feat: Add --workdir flag for cluster restore
Solves disk space issues on VMs with small system disks but large NFS mounts.

Use case:
- VM has small / partition (e.g., 7.8G with 2.3G used)
- Backup archive on NFS mount (e.g., /u01/dba with 140G free)
- Restore fails: "insufficient disk space: 74.7% used - need at least 4x archive size"

Solution:
- Added --workdir flag to restore cluster command
- Allows specifying alternative extraction directory
- Interactive confirmation required for safety
- Updated error messages with helpful tip

Example:
  dbbackup restore cluster backup.tar.gz --workdir /u01/dba/restore_tmp --confirm

This is environmental, not a bug. Code working brilliantly! 👨‍🍳💋
2025-11-28 11:24:19 +00:00
0cf21cd893 feat: Complete MEDIUM priority security features with testing
- Implemented TUI auto-select for automated testing
- Fixed TUI automation: autoSelectMsg handling in Update()
- Auto-database selection in DatabaseSelector
- Created focused test suite (test_as_postgres.sh)
- Created retention policy test (test_retention.sh)
- All 10 security tests passing

Features validated:
 Backup retention policy (30 days, min backups)
 Rate limiting (exponential backoff)
 Privilege checks (root detection)
 Resource limit validation
 Path sanitization
 Checksum verification (SHA-256)
 Audit logging
 Secure permissions
 Configuration persistence
 TUI automation framework

Test results: 10/10 passed
Backup files created with .dump, .sha256, .info
Retention cleanup verified (old files removed)
2025-11-25 15:25:56 +00:00
eb3e5c0135 Fix: MySQL/MariaDB socket authentication - remove hardcoded -h flag for localhost
Issue: MySQL/MariaDB functions always used '-h hostname' flag, which can cause
issues with Unix socket authentication when connecting to localhost.

Similar to PostgreSQL peer authentication, MySQL prefers Unix socket connections
for localhost rather than TCP connections. Using '-h localhost' forces TCP which
may fail with socket-based authentication configurations.

Fixed locations:
1. internal/restore/safety.go:
   - checkMySQLDatabaseExists() - now conditionally adds -h flag
   - listMySQLUserDatabases() - now conditionally adds -h flag

2. cmd/placeholder.go:
   - mysqlRestoreCommand() - now conditionally adds -h flag

Pattern applied (consistent with PostgreSQL fixes):
- Skip -h flag when host is localhost, 127.0.0.1, or empty
- Only add -h flag for actual remote hosts
- Allows mysql client to use Unix socket connection for local access

This ensures MySQL/MariaDB operations work correctly with both:
- Socket authentication (localhost via Unix socket)
- Password authentication (remote hosts via TCP)
2025-11-12 08:55:06 +00:00
98f483ae11 Fix: Database listing now works with peer authentication
Issue: Interactive cluster restore preview showed 'Cannot list databases: exit status 2'
when trying to detect existing databases. This happened because the safety check
functions always used '-h hostname' flag with psql, which breaks peer authentication.

Root cause:
- listPostgresUserDatabases() and checkPostgresDatabaseExists() always included -h flag
- For localhost peer auth, psql should connect via Unix socket (no -h flag)
- Adding -h localhost forces TCP connection which fails with peer authentication

Solution: Match the pattern used throughout the codebase:
- Only add -h flag when host is NOT localhost/127.0.0.1/empty
- For localhost, skip -h flag to use Unix socket
- Set PGPASSWORD only if password is provided

Fixed functions in internal/restore/safety.go:
- listPostgresUserDatabases()
- checkPostgresDatabaseExists()

Now interactive mode correctly shows existing databases count and list when
running as postgres user with peer authentication.
2025-11-12 08:43:16 +00:00
661fd7e671 Add Option C: Smart cluster cleanup before restore (TUI)
- Auto-detects existing user databases before cluster restore
- Shows count and list (first 5) in preview screen
- Toggle option 'c' to enable cluster cleanup
- Drops all user databases before restore when enabled
- Works for PostgreSQL, MySQL, MariaDB
- Safety warning with database count
- Implements practical disaster recovery workflow
2025-11-11 21:38:40 +00:00
fb27eefb49 Fix cross-platform compilation for all target platforms
- Fixed type mismatch in disk space calculation (int64 casting)
- Created platform-specific disk space implementations:
  * diskspace_unix.go (Linux, macOS, FreeBSD)
  * diskspace_windows.go (Windows)
  * diskspace_bsd.go (OpenBSD)
  * diskspace_netbsd.go (NetBSD fallback)
- All 10 platforms now compile successfully:
   Linux (amd64, arm64, armv7)
   macOS (Intel, Apple Silicon)
   Windows (amd64, arm64)
   FreeBSD, OpenBSD, NetBSD
2025-11-07 15:16:54 +00:00
97be6564ef feat: implement full restore functionality with TUI integration
- Add complete restore engine (internal/restore/)
  - RestoreSingle() for single database restore
  - RestoreCluster() for full cluster restore
  - Archive format detection (7 formats supported)
  - Safety validation (integrity, disk space, tools)
  - Streaming decompression with pigz support

- Add CLI restore commands (cmd/restore.go)
  - restore single: restore single database backup
  - restore cluster: restore full cluster backup
  - restore list: list available backup archives
  - Safety-first design: dry-run by default, --confirm required

- Add TUI restore integration (internal/tui/)
  - Archive browser: browse and select backups
  - Restore preview: safety checks and confirmation
  - Restore execution: real-time progress tracking
  - Backup manager: comprehensive archive management

- Features:
  - Format auto-detection (.dump, .dump.gz, .sql, .sql.gz, .tar.gz)
  - Archive validation before restore
  - Disk space verification
  - Tool availability checks
  - Target database configuration
  - Clean-first and create-if-missing options
  - Parallel decompression support
  - Progress tracking with phases

Phase 1 (Core Functionality) complete and tested
2025-11-07 09:41:44 +00:00