CLI for automated backups. TUI for guided restores. Restores matter as much as backups, and during an incident you don't want to be digging through docs for CLI flags. Supports MySQL, MariaDB, PostgreSQL, and SQLite to local or cloud storage (via rclone).
- Interactive TUI - Manage databases, run backups, and restore with a terminal interface
- CLI mode - Script backups in cron jobs or CI/CD pipelines
- Multiple storage backends - Local paths or 70+ cloud providers via rclone (S3, GCS, Azure, B2, etc.)
- Compression - gzip, zstd, xz, zip, or none
- Retention policies - Automatically clean up old backups by count, age, or size
- Parallel execution - Back up multiple databases concurrently
| Database | Backup Tool | Restore Tool | Notes |
|---|---|---|---|
| MySQL | mysqldump |
mysql |
Also works with MariaDB |
| MariaDB | mysqldump |
mysql |
Uses MySQL tools |
| PostgreSQL | pg_dump |
psql |
|
| SQLite | file copy | file copy | Any file-based database |
Ensure the required tools are installed and available in your PATH.
brew install Yoone/tap/blobbercurl -sSL https://raw.githubusercontent.com/Yoone/blobber/main/install.sh | shOr specify a version and install directory:
VERSION=v0.1.0 INSTALL_DIR=/opt/bin curl -sSL https://raw.githubusercontent.com/Yoone/blobber/main/install.sh | shgo install github.com/Yoone/blobber@latestgit clone git@github.com:Yoone/blobber.git
cd blobber
make- Go 1.24+ to build from source
- Database tools for your DBMS (see table above)
- rclone CLI (optional - only needed if configuring remotes outside the TUI)
blobber version- Create a config file
~/.config/blobber/config.yaml:
databases:
my-postgres:
type: postgres
host: localhost
port: 5432
user: myuser
password: mypassword
database: mydb
dest: /backups/postgres
compression: gz
retention:
keep_last: 7- Run blobber:
blobberBlobber uses a YAML configuration file. By default, it looks for ~/.config/blobber/config.yaml. If ./blobber.yaml exists in the current directory, it will be used instead (useful for project-specific configs).
databases:
# SQLite / file backup
myapp:
type: file
path: /var/lib/myapp/data.db
dest: s3:mybucket/myapp
compression: gz
retention:
keep_last: 7
# MySQL / MariaDB
wordpress:
type: mysql
host: localhost
port: 3306
user: backup_user
password: ${MYSQL_BACKUP_PASS} # Environment variable
database: wordpress
dest: b2:backups/wordpress
compression: zstd
retention:
keep_days: 30
# PostgreSQL
analytics:
type: postgres
host: localhost
port: 5432
user: backup_user
password: ${PG_BACKUP_PASS}
database: analytics
dest: /backups/analytics # Local path
compression: none
retention:
max_size_mb: 500| Option | Description |
|---|---|
none |
No compression |
gz |
gzip (recommended for most cases) |
zstd |
Zstandard (faster, better compression) |
xz |
XZ (best compression, slower) |
zip |
ZIP archive |
| Option | Description |
|---|---|
keep_last: N |
Keep the N most recent backups |
keep_days: N |
Keep backups from the last N days |
max_size_mb: N |
Keep backups until total size exceeds N MB |
Rules can be combined. A backup is deleted if any rule marks it for deletion.
Destinations can be:
- Local paths:
/backups/mydbor./backups/mydb - Rclone remotes:
s3:bucket/path,gcs:bucket/path,b2:bucket/path, etc.
Blobber uses rclone internally for cloud storage. You can configure storage destinations in two ways:
-
Through the TUI - Navigate to "Manage rclone destinations" to add, edit, or test remotes interactively. No rclone CLI needed.
-
Using existing rclone config - If you have rclone installed and configured, blobber will use your existing remotes from
~/.config/rclone/rclone.conf.
To use a custom rclone config file:
blobber --rclone-config /path/to/rclone.confLaunch the interactive terminal interface:
blobber # Uses ~/.config/blobber/config.yaml
blobber -c /path/to/config.yaml # Custom config path
blobber --rclone-config ~/rclone.conf # Custom rclone config| Flag | Short | Description |
|---|---|---|
--config |
-c |
Path to config file (default: ~/.config/blobber/config.yaml) |
--rclone-config |
Path to rclone config file (default: ~/.config/rclone/rclone.conf) |
Run database backups.
blobber backup # Backup all databases
blobber backup mydb # Backup specific database
blobber backup db1 db2 # Backup multiple databases
blobber backup --dry-run # Dump only, skip upload
blobber backup --skip-retention # Skip retention policy cleanup| Flag | Description |
|---|---|
--dry-run |
Perform dump but skip upload and retention cleanup |
--skip-retention |
Skip retention policy for this run |
List available backups for a database.
blobber list mydbOutput shows backup filename, size, and timestamp.
Restore a database from backup.
blobber restore mydb backup_2024-01-15_120000.sql.gz # From remote
blobber restore --local mydb /path/to/local/backup.sql.gz # From local file| Flag | Description |
|---|---|
--local |
Restore from a local file instead of downloading from remote |
- Docker and Docker Compose
- sqlite3 CLI
Start a local environment with test databases:
make dev-up # Start MySQL, MariaDB, PostgreSQL, MinIO, Azurite
make dev # Run TUI with dev config
make dev-down # Stop containers
make dev-clean # Clean up backup files| Service | Host | Port | Credentials |
|---|---|---|---|
| MySQL | localhost | 3306 | testuser / testpass / testdb |
| MariaDB | localhost | 3307 | testuser / testpass / testdb |
| PostgreSQL | localhost | 5432 | testuser / testpass / testdb |
| SQLite | dev/test.db | - | - |
| MinIO | localhost | 9001 | minioadmin / minioadmin |
| Azurite | localhost | 10000 | devstoreaccount1 |
make test # Unit tests
make test-integration # Integration tests (starts Docker)
make test-all # All tests