- Added CPU Workload Profiles section with auto-adjustment details - Documented parallel cluster operations and worker pools - Added CLUSTER_PARALLELISM environment variable documentation - Documented backup management features (delete archives) - Added Recent Improvements section highlighting performance optimizations - Updated memory usage details (constant ~1GB regardless of size) - Enhanced interactive features list with CPU workload and backup management - Added bug fixes section documenting OOM and confirmation dialog fixes
763 lines
18 KiB
Markdown
763 lines
18 KiB
Markdown
# dbbackup
|
||
|
||

|
||
|
||
Professional database backup and restore utility for PostgreSQL, MySQL, and MariaDB.
|
||
|
||
## Key Features
|
||
|
||
- Multi-database support: PostgreSQL, MySQL, MariaDB
|
||
- Backup modes: Single database, cluster, sample data
|
||
- Restore operations with safety checks and validation
|
||
- Automatic CPU detection and parallel processing
|
||
- Streaming compression for large databases
|
||
- Interactive terminal UI with progress tracking
|
||
- Cross-platform binaries (Linux, macOS, BSD)
|
||
|
||
## Installation
|
||
|
||
### Download Pre-compiled Binary
|
||
|
||
Linux x86_64:
|
||
|
||
```bash
|
||
curl -L https://git.uuxo.net/uuxo/dbbackup/raw/branch/main/bin/dbbackup_linux_amd64 -o dbbackup
|
||
chmod +x dbbackup
|
||
```
|
||
|
||
Linux ARM64:
|
||
|
||
```bash
|
||
curl -L https://git.uuxo.net/uuxo/dbbackup/raw/branch/main/bin/dbbackup_linux_arm64 -o dbbackup
|
||
chmod +x dbbackup
|
||
```
|
||
|
||
macOS Intel:
|
||
|
||
```bash
|
||
curl -L https://git.uuxo.net/uuxo/dbbackup/raw/branch/main/bin/dbbackup_darwin_amd64 -o dbbackup
|
||
chmod +x dbbackup
|
||
```
|
||
|
||
macOS Apple Silicon:
|
||
|
||
```bash
|
||
curl -L https://git.uuxo.net/uuxo/dbbackup/raw/branch/main/bin/dbbackup_darwin_arm64 -o dbbackup
|
||
chmod +x dbbackup
|
||
```
|
||
|
||
Other platforms available in `bin/` directory: FreeBSD, OpenBSD, NetBSD.
|
||
|
||
### Build from Source
|
||
|
||
Requires Go 1.19 or later:
|
||
|
||
```bash
|
||
git clone https://git.uuxo.net/uuxo/dbbackup.git
|
||
cd dbbackup
|
||
go build
|
||
```
|
||
|
||
## Quick Start
|
||
|
||
### Interactive Mode
|
||
|
||
PostgreSQL (peer authentication):
|
||
|
||
```bash
|
||
sudo -u postgres ./dbbackup interactive
|
||
```
|
||
|
||
MySQL/MariaDB:
|
||
|
||
```bash
|
||
./dbbackup interactive --db-type mysql --user root --password secret
|
||
```
|
||
|
||
Menu-driven interface for all operations. Press arrow keys to navigate, Enter to select.
|
||
|
||
#### Interactive Features
|
||
|
||
- **Backup Selection**: Choose backup type (single, cluster, sample)
|
||
- **Database Selection**: Browse and select database
|
||
- **Configuration Settings**: Set compression, parallelism, CPU workload, performance options
|
||
- **CPU Workload Profiles**: Balanced, CPU-Intensive, or I/O-Intensive (auto-adjusts Jobs/DumpJobs)
|
||
- **Backup Management**: List, restore, verify, and delete backup archives
|
||
- **Safety Checks**: Archive validation, disk space verification
|
||
- **Progress Tracking**: Real-time progress with ETA estimation
|
||
- **Restore Options**: Smart database cleanup detection, safety confirmations
|
||
|
||
### Command Line Mode
|
||
|
||
Backup single database:
|
||
|
||
```bash
|
||
./dbbackup backup single myapp_db
|
||
```
|
||
|
||
Backup entire cluster (PostgreSQL):
|
||
|
||
```bash
|
||
./dbbackup backup cluster
|
||
```
|
||
|
||
Restore database:
|
||
|
||
```bash
|
||
./dbbackup restore single backup.dump --target myapp_db --create
|
||
```
|
||
|
||
Restore full cluster:
|
||
|
||
```bash
|
||
./dbbackup restore cluster cluster_backup.tar.gz --confirm
|
||
```
|
||
|
||
## Commands
|
||
|
||
### Global Flags (Available for all commands)
|
||
|
||
| Flag | Description | Default |
|
||
|------|-------------|---------|
|
||
| `-d, --db-type` | postgres, mysql, mariadb | postgres |
|
||
| `--host` | Database host | localhost |
|
||
| `--port` | Database port | 5432 (postgres), 3306 (mysql) |
|
||
| `--user` | Database user | root |
|
||
| `--password` | Database password | (empty) |
|
||
| `--database` | Database name | postgres |
|
||
| `--backup-dir` | Backup directory | /root/db_backups |
|
||
| `--compression` | Compression level 0-9 | 6 |
|
||
| `--ssl-mode` | disable, prefer, require, verify-ca, verify-full | prefer |
|
||
| `--insecure` | Disable SSL/TLS | false |
|
||
| `--jobs` | Parallel jobs | 8 |
|
||
| `--dump-jobs` | Parallel dump jobs | 8 |
|
||
| `--max-cores` | Maximum CPU cores | 16 |
|
||
| `--cpu-workload` | cpu-intensive, io-intensive, balanced | balanced |
|
||
| `--auto-detect-cores` | Auto-detect CPU cores | true |
|
||
| `--debug` | Enable debug logging | false |
|
||
| `--no-color` | Disable colored output | false |
|
||
|
||
### Backup Operations
|
||
|
||
#### Single Database
|
||
|
||
Backup a single database to compressed archive:
|
||
|
||
```bash
|
||
./dbbackup backup single DATABASE_NAME [OPTIONS]
|
||
```
|
||
|
||
**Common Options:**
|
||
|
||
- `--host STRING` - Database host (default: localhost)
|
||
- `--port INT` - Database port (default: 5432 PostgreSQL, 3306 MySQL)
|
||
- `--user STRING` - Database user (default: postgres)
|
||
- `--password STRING` - Database password
|
||
- `--db-type STRING` - Database type: postgres, mysql, mariadb (default: postgres)
|
||
- `--backup-dir STRING` - Backup directory (default: /var/lib/pgsql/db_backups)
|
||
- `--compression INT` - Compression level 0-9 (default: 6)
|
||
- `--insecure` - Disable SSL/TLS
|
||
- `--ssl-mode STRING` - SSL mode: disable, prefer, require, verify-ca, verify-full
|
||
|
||
**Examples:**
|
||
|
||
```bash
|
||
# Basic backup
|
||
./dbbackup backup single production_db
|
||
|
||
# Remote database with custom settings
|
||
./dbbackup backup single myapp_db \
|
||
--host db.example.com \
|
||
--port 5432 \
|
||
--user backup_user \
|
||
--password secret \
|
||
--compression 9 \
|
||
--backup-dir /mnt/backups
|
||
|
||
# MySQL database
|
||
./dbbackup backup single wordpress \
|
||
--db-type mysql \
|
||
--user root \
|
||
--password secret
|
||
```
|
||
|
||
Supported formats:
|
||
- PostgreSQL: Custom format (.dump) or SQL (.sql)
|
||
- MySQL/MariaDB: SQL (.sql)
|
||
|
||
#### Cluster Backup (PostgreSQL)
|
||
|
||
Backup all databases in PostgreSQL cluster including roles and tablespaces:
|
||
|
||
```bash
|
||
./dbbackup backup cluster [OPTIONS]
|
||
```
|
||
|
||
**Performance Options:**
|
||
|
||
- `--max-cores INT` - Maximum CPU cores (default: auto-detect)
|
||
- `--cpu-workload STRING` - Workload type: cpu-intensive, io-intensive, balanced (default: balanced)
|
||
- `--jobs INT` - Parallel jobs (default: auto-detect based on workload)
|
||
- `--dump-jobs INT` - Parallel dump jobs (default: auto-detect based on workload)
|
||
- `--cluster-parallelism INT` - Concurrent database operations (default: 2, configurable via CLUSTER_PARALLELISM env var)
|
||
|
||
**Examples:**
|
||
|
||
```bash
|
||
# Standard cluster backup
|
||
sudo -u postgres ./dbbackup backup cluster
|
||
|
||
# High-performance backup
|
||
sudo -u postgres ./dbbackup backup cluster \
|
||
--compression 3 \
|
||
--max-cores 16 \
|
||
--cpu-workload cpu-intensive \
|
||
--jobs 16
|
||
```
|
||
|
||
Output: tar.gz archive containing all databases and globals.
|
||
|
||
#### Sample Backup
|
||
|
||
Create reduced-size backup for testing/development:
|
||
|
||
```bash
|
||
./dbbackup backup sample DATABASE_NAME [OPTIONS]
|
||
```
|
||
|
||
**Options:**
|
||
|
||
- `--sample-strategy STRING` - Strategy: ratio, percent, count (default: ratio)
|
||
- `--sample-value FLOAT` - Sample value based on strategy (default: 10)
|
||
|
||
**Examples:**
|
||
|
||
```bash
|
||
# Keep 10% of all rows
|
||
./dbbackup backup sample myapp_db --sample-strategy percent --sample-value 10
|
||
|
||
# Keep 1 in 100 rows
|
||
./dbbackup backup sample myapp_db --sample-strategy ratio --sample-value 100
|
||
|
||
# Keep 5000 rows per table
|
||
./dbbackup backup sample myapp_db --sample-strategy count --sample-value 5000
|
||
```
|
||
|
||
**Warning:** Sample backups may break referential integrity.
|
||
|
||
### Restore Operations
|
||
|
||
#### Single Database Restore
|
||
|
||
Restore database from backup file:
|
||
|
||
```bash
|
||
./dbbackup restore single BACKUP_FILE [OPTIONS]
|
||
```
|
||
|
||
**Options:**
|
||
|
||
- `--target STRING` - Target database name (required)
|
||
- `--create` - Create database if it doesn't exist
|
||
- `--clean` - Drop and recreate database before restore
|
||
- `--jobs INT` - Parallel restore jobs (default: 4)
|
||
- `--verbose` - Show detailed progress
|
||
- `--no-progress` - Disable progress indicators
|
||
- `--confirm` - Execute restore (required for safety, dry-run by default)
|
||
- `--dry-run` - Preview without executing
|
||
- `--force` - Skip safety checks
|
||
|
||
**Examples:**
|
||
|
||
```bash
|
||
# Basic restore
|
||
./dbbackup restore single /backups/myapp_20250112.dump --target myapp_restored
|
||
|
||
# Restore with database creation
|
||
./dbbackup restore single backup.dump \
|
||
--target myapp_db \
|
||
--create \
|
||
--jobs 8
|
||
|
||
# Clean restore (drops existing database)
|
||
./dbbackup restore single backup.dump \
|
||
--target myapp_db \
|
||
--clean \
|
||
--verbose
|
||
```
|
||
|
||
Supported formats:
|
||
- PostgreSQL: .dump, .dump.gz, .sql, .sql.gz
|
||
- MySQL: .sql, .sql.gz
|
||
|
||
#### Cluster Restore (PostgreSQL)
|
||
|
||
Restore entire PostgreSQL cluster from archive:
|
||
|
||
```bash
|
||
./dbbackup restore cluster ARCHIVE_FILE [OPTIONS]
|
||
```
|
||
|
||
**Options:**
|
||
|
||
- `--confirm` - Confirm and execute restore (required for safety)
|
||
- `--dry-run` - Show what would be done without executing
|
||
- `--force` - Skip safety checks
|
||
- `--jobs INT` - Parallel decompression jobs (default: auto)
|
||
- `--verbose` - Show detailed progress
|
||
- `--no-progress` - Disable progress indicators
|
||
|
||
**Examples:**
|
||
|
||
```bash
|
||
# Standard cluster restore
|
||
sudo -u postgres ./dbbackup restore cluster cluster_backup.tar.gz --confirm
|
||
|
||
# Dry-run to preview
|
||
sudo -u postgres ./dbbackup restore cluster cluster_backup.tar.gz --dry-run
|
||
|
||
# High-performance restore
|
||
sudo -u postgres ./dbbackup restore cluster cluster_backup.tar.gz \
|
||
--confirm \
|
||
--jobs 16 \
|
||
--verbose
|
||
```
|
||
|
||
**Safety Features:**
|
||
|
||
- Archive integrity validation
|
||
- Disk space checks (4x archive size recommended)
|
||
- Automatic database cleanup detection (interactive mode)
|
||
- Progress tracking with ETA estimation
|
||
|
||
#### Restore List
|
||
|
||
Show available backup archives in backup directory:
|
||
|
||
```bash
|
||
./dbbackup restore list
|
||
```
|
||
|
||
### System Commands
|
||
|
||
#### Status Check
|
||
|
||
Check database connection and configuration:
|
||
|
||
```bash
|
||
./dbbackup status [OPTIONS]
|
||
```
|
||
|
||
Shows: Database type, host, port, user, connection status, available databases.
|
||
|
||
#### Preflight Checks
|
||
|
||
Run pre-backup validation checks:
|
||
|
||
```bash
|
||
./dbbackup preflight [OPTIONS]
|
||
```
|
||
|
||
Verifies: Database connection, required tools, disk space, permissions.
|
||
|
||
#### List Databases
|
||
|
||
List available databases:
|
||
|
||
```bash
|
||
./dbbackup list [OPTIONS]
|
||
```
|
||
|
||
#### CPU Information
|
||
|
||
Display CPU configuration and optimization settings:
|
||
|
||
```bash
|
||
./dbbackup cpu
|
||
```
|
||
|
||
Shows: CPU count, model, workload recommendation, suggested parallel jobs.
|
||
|
||
#### Version
|
||
|
||
Display version information:
|
||
|
||
```bash
|
||
./dbbackup version
|
||
```
|
||
|
||
## Configuration
|
||
|
||
### PostgreSQL Authentication
|
||
|
||
PostgreSQL uses different authentication methods based on system configuration.
|
||
|
||
**Peer/Ident Authentication (Linux Default)**
|
||
|
||
Run as postgres system user:
|
||
|
||
```bash
|
||
sudo -u postgres ./dbbackup backup cluster
|
||
```
|
||
|
||
**Password Authentication**
|
||
|
||
Option 1: .pgpass file (recommended for automation):
|
||
|
||
```bash
|
||
echo "localhost:5432:*:postgres:password" > ~/.pgpass
|
||
chmod 0600 ~/.pgpass
|
||
./dbbackup backup single mydb --user postgres
|
||
```
|
||
|
||
Option 2: Environment variable:
|
||
|
||
```bash
|
||
export PGPASSWORD=your_password
|
||
./dbbackup backup single mydb --user postgres
|
||
```
|
||
|
||
Option 3: Command line flag:
|
||
|
||
```bash
|
||
./dbbackup backup single mydb --user postgres --password your_password
|
||
```
|
||
|
||
### MySQL/MariaDB Authentication
|
||
|
||
**Option 1: Command line**
|
||
|
||
```bash
|
||
./dbbackup backup single mydb --db-type mysql --user root --password secret
|
||
```
|
||
|
||
**Option 2: Environment variable**
|
||
|
||
```bash
|
||
export MYSQL_PWD=your_password
|
||
./dbbackup backup single mydb --db-type mysql --user root
|
||
```
|
||
|
||
**Option 3: Configuration file**
|
||
|
||
```bash
|
||
cat > ~/.my.cnf << EOF
|
||
[client]
|
||
user=backup_user
|
||
password=your_password
|
||
host=localhost
|
||
EOF
|
||
chmod 0600 ~/.my.cnf
|
||
```
|
||
|
||
### Environment Variables
|
||
|
||
PostgreSQL:
|
||
|
||
```bash
|
||
export PG_HOST=localhost
|
||
export PG_PORT=5432
|
||
export PG_USER=postgres
|
||
export PGPASSWORD=password
|
||
```
|
||
|
||
MySQL/MariaDB:
|
||
|
||
```bash
|
||
export MYSQL_HOST=localhost
|
||
export MYSQL_PORT=3306
|
||
export MYSQL_USER=root
|
||
export MYSQL_PWD=password
|
||
```
|
||
|
||
General:
|
||
|
||
```bash
|
||
export BACKUP_DIR=/var/backups/databases
|
||
export COMPRESS_LEVEL=6
|
||
export CLUSTER_TIMEOUT_MIN=240
|
||
```
|
||
|
||
### Database Types
|
||
|
||
- `postgres` - PostgreSQL
|
||
- `mysql` - MySQL
|
||
- `mariadb` - MariaDB
|
||
|
||
Select via:
|
||
- CLI: `-d postgres` or `--db-type postgres`
|
||
- Interactive: Arrow keys to cycle through options
|
||
|
||
## Performance
|
||
|
||
### Memory Usage
|
||
|
||
Streaming architecture maintains constant memory usage:
|
||
|
||
| Database Size | Memory Usage |
|
||
|---------------|--------------|
|
||
| 1-10 GB | ~800 MB |
|
||
| 10-50 GB | ~900 MB |
|
||
| 50-100 GB | ~950 MB |
|
||
| 100+ GB | <1 GB |
|
||
|
||
### Large Database Optimization
|
||
|
||
- Databases >5GB automatically use plain format with streaming compression
|
||
- Parallel compression via pigz (if available)
|
||
- Per-database timeout: 4 hours default
|
||
- Automatic format selection based on size
|
||
|
||
### CPU Optimization
|
||
|
||
Automatically detects CPU configuration and optimizes parallelism:
|
||
|
||
```bash
|
||
./dbbackup cpu
|
||
```
|
||
|
||
Manual override:
|
||
|
||
```bash
|
||
./dbbackup backup cluster \
|
||
--max-cores 32 \
|
||
--jobs 32 \
|
||
--cpu-workload cpu-intensive
|
||
```
|
||
|
||
### Parallelism
|
||
|
||
```bash
|
||
./dbbackup backup cluster --jobs 16 --dump-jobs 16
|
||
```
|
||
|
||
- `--jobs` - Compression/decompression parallel jobs
|
||
- `--dump-jobs` - Database dump parallel jobs
|
||
- `--max-cores` - Limit CPU cores (default: 16)
|
||
- Cluster operations use worker pools with configurable parallelism (default: 2 concurrent databases)
|
||
- Set `CLUSTER_PARALLELISM` environment variable to adjust concurrent database operations
|
||
|
||
### CPU Workload
|
||
|
||
```bash
|
||
./dbbackup backup cluster --cpu-workload cpu-intensive
|
||
```
|
||
|
||
Options: `cpu-intensive`, `io-intensive`, `balanced` (default)
|
||
|
||
Workload types automatically adjust Jobs and DumpJobs:
|
||
- **Balanced**: Jobs = PhysicalCores, DumpJobs = PhysicalCores/2 (min 2)
|
||
- **CPU-Intensive**: Jobs = PhysicalCores×2, DumpJobs = PhysicalCores (more parallelism)
|
||
- **I/O-Intensive**: Jobs = PhysicalCores/2 (min 1), DumpJobs = 2 (less parallelism to avoid I/O contention)
|
||
|
||
Configure in interactive mode via Configuration Settings menu.
|
||
|
||
### Compression
|
||
|
||
```bash
|
||
./dbbackup backup single mydb --compression 9
|
||
```
|
||
|
||
- Level 0 = No compression (fastest)
|
||
- Level 6 = Balanced (default)
|
||
- Level 9 = Maximum compression (slowest)
|
||
|
||
### SSL/TLS Configuration
|
||
|
||
SSL modes: `disable`, `prefer`, `require`, `verify-ca`, `verify-full`
|
||
|
||
```bash
|
||
# Disable SSL
|
||
./dbbackup backup single mydb --insecure
|
||
|
||
# Require SSL
|
||
./dbbackup backup single mydb --ssl-mode require
|
||
|
||
# Verify certificate
|
||
./dbbackup backup single mydb --ssl-mode verify-full
|
||
```
|
||
|
||
## Disaster Recovery
|
||
|
||
Complete automated disaster recovery test:
|
||
|
||
```bash
|
||
sudo ./disaster_recovery_test.sh
|
||
```
|
||
|
||
This script:
|
||
|
||
1. Backs up entire cluster with maximum performance
|
||
2. Documents pre-backup state
|
||
3. Destroys all user databases (confirmation required)
|
||
4. Restores full cluster from backup
|
||
5. Verifies restoration success
|
||
|
||
**Warning:** Destructive operation. Use only in test environments.
|
||
|
||
## Troubleshooting
|
||
|
||
### Connection Issues
|
||
|
||
**Test connectivity:**
|
||
|
||
```bash
|
||
./dbbackup status
|
||
```
|
||
|
||
**PostgreSQL peer authentication error:**
|
||
|
||
```bash
|
||
sudo -u postgres ./dbbackup status
|
||
```
|
||
|
||
**SSL/TLS issues:**
|
||
|
||
```bash
|
||
./dbbackup status --insecure
|
||
```
|
||
|
||
### Out of Memory
|
||
|
||
**Check memory:**
|
||
|
||
```bash
|
||
free -h
|
||
dmesg | grep -i oom
|
||
```
|
||
|
||
**Add swap space:**
|
||
|
||
```bash
|
||
sudo fallocate -l 16G /swapfile
|
||
sudo chmod 600 /swapfile
|
||
sudo mkswap /swapfile
|
||
sudo swapon /swapfile
|
||
```
|
||
|
||
**Reduce parallelism:**
|
||
|
||
```bash
|
||
./dbbackup backup cluster --jobs 4 --dump-jobs 4
|
||
```
|
||
|
||
### Debug Mode
|
||
|
||
Enable detailed logging:
|
||
|
||
```bash
|
||
./dbbackup backup single mydb --debug
|
||
```
|
||
|
||
### Common Errors
|
||
|
||
- **"Ident authentication failed"** - Run as matching OS user or configure password authentication
|
||
- **"Permission denied"** - Check database user privileges
|
||
- **"Disk space check failed"** - Ensure 4x archive size available
|
||
- **"Archive validation failed"** - Backup file corrupted or incomplete
|
||
|
||
## Building
|
||
|
||
Build for all platforms:
|
||
|
||
```bash
|
||
./build_all.sh
|
||
```
|
||
|
||
Binaries created in `bin/` directory.
|
||
|
||
## Requirements
|
||
|
||
### System Requirements
|
||
|
||
- Linux, macOS, FreeBSD, OpenBSD, NetBSD
|
||
- 1 GB RAM minimum (2 GB recommended for large databases)
|
||
- Disk space: 30-50% of database size for backups
|
||
|
||
### Software Requirements
|
||
|
||
**PostgreSQL:**
|
||
- Client tools: psql, pg_dump, pg_dumpall, pg_restore
|
||
- PostgreSQL 10 or later
|
||
|
||
**MySQL/MariaDB:**
|
||
- Client tools: mysql, mysqldump
|
||
- MySQL 5.7+ or MariaDB 10.3+
|
||
|
||
**Optional:**
|
||
- pigz (parallel compression)
|
||
- pv (progress monitoring)
|
||
|
||
## Best Practices
|
||
|
||
1. **Test restores regularly** - Verify backups work
|
||
2. **Monitor disk space** - Ensure adequate space
|
||
3. **Use compression** - Balance speed/space (level 3-6)
|
||
4. **Automate backups** - cron or systemd timers
|
||
5. **Secure credentials** - .pgpass/.my.cnf with 0600 permissions
|
||
6. **Keep versions** - Multiple backup versions for point-in-time recovery
|
||
7. **Off-site storage** - Remote backup copies
|
||
8. **Document procedures** - Maintain restore runbooks
|
||
|
||
## Project Structure
|
||
|
||
```
|
||
dbbackup/
|
||
├── main.go # Entry point
|
||
├── cmd/ # CLI commands
|
||
├── internal/
|
||
│ ├── backup/ # Backup engine
|
||
│ ├── restore/ # Restore engine
|
||
│ ├── config/ # Configuration
|
||
│ ├── database/ # Database drivers
|
||
│ ├── cpu/ # CPU detection
|
||
│ ├── logger/ # Logging
|
||
│ ├── progress/ # Progress tracking
|
||
│ └── tui/ # Interactive UI
|
||
├── bin/ # Pre-compiled binaries
|
||
├── disaster_recovery_test.sh # DR testing script
|
||
└── build_all.sh # Multi-platform build
|
||
```
|
||
|
||
## Support
|
||
|
||
- Repository: https://git.uuxo.net/uuxo/dbbackup
|
||
- Issues: Use repository issue tracker
|
||
|
||
## License
|
||
|
||
MIT License
|
||
|
||
## Recent Improvements
|
||
|
||
### Performance Optimizations
|
||
- **Parallel Cluster Operations**: Worker pool pattern for concurrent database backup/restore (3-5x speedup)
|
||
- **Memory Efficiency**: Streaming command output eliminates OOM errors on large restores
|
||
- **Optimized Goroutines**: Ticker-based progress indicators reduce CPU overhead
|
||
- **Configurable Concurrency**: Control parallel database operations via CLUSTER_PARALLELISM
|
||
|
||
### Interactive UI Enhancements
|
||
- **CPU Workload Profiles**: Configure workload type in settings (auto-adjusts parallelism)
|
||
- **Backup Management**: Delete archives directly from TUI with confirmation
|
||
- **Better Callbacks**: Fixed confirmation dialogs to execute correct actions
|
||
- **Cleaner Interface**: Configuration consolidated in Settings menu
|
||
|
||
### Bug Fixes
|
||
- Fixed OOM error during large cluster restores
|
||
- Fixed delete backup incorrectly triggering cluster backup
|
||
- Fixed signal handler cleanup preventing goroutine leaks
|
||
- Improved error handling and user feedback
|
||
|
||
## Why dbbackup?
|
||
|
||
- **Reliable** - Comprehensive safety checks, validation, and error handling
|
||
- **Simple** - Intuitive menu-driven interface or straightforward CLI
|
||
- **Fast** - Automatic CPU detection, parallel processing, streaming compression
|
||
- **Efficient** - Minimal memory footprint, even for huge databases (constant ~1GB regardless of size)
|
||
- **Flexible** - Multiple backup modes, compression levels, performance options
|
||
- **Safe** - Dry-run by default, archive verification, smart database cleanup
|
||
- **Complete** - Full cluster backup/restore, multiple formats
|
||
- **Scalable** - Handles databases from megabytes to terabytes
|
||
|
||
dbbackup is production-ready for backup and disaster recovery operations on PostgreSQL, MySQL, and MariaDB databases of any size.
|