Documentation Index
Fetch the complete documentation index at: https://mintlify.com/bidewio/better-openclaw/llms.txt
Use this file to discover all available pages before exploring further.
The backup commands help you create, restore, and manage backups of your OpenClaw stack data, including PostgreSQL dumps and Qdrant snapshots.
Subcommands
create
Create a backup of the stack (PostgreSQL dump, Qdrant snapshot).
create-better-openclaw backup create [options]
Options
Project directory containing the stack (default: current directory).
Output directory for the backup archive. If not specified, backups are saved to ./backups/ in the stack directory.
Output results as JSON for programmatic use.
restore
Restore from a backup archive.
create-better-openclaw backup restore <file> [options]
Arguments
Path to the backup .tar.gz file to restore.
Options
Project directory containing the stack (default: current directory).
Output results as JSON for programmatic use.
list
List available backups.
create-better-openclaw backup list [options]
Options
Project directory containing the stack (default: current directory).
Output results as JSON for programmatic use.
Examples
Create a backup
cd my-stack
create-better-openclaw backup create
Output:
Creating backup...
Backing up PostgreSQL...
✓ Database dump: openclaw.sql (12.4 MB)
Backing up Qdrant...
✓ Snapshot created: qdrant-snapshot.tar (45.2 MB)
Creating archive...
✓ Backup saved: ./backups/openclaw-backup-2026-03-03-14-32-15.tar.gz (57.6 MB)
Backup complete!
Create backup with custom output location
create-better-openclaw backup create --output /mnt/backups
Output:
Creating backup...
Backing up PostgreSQL...
✓ Database dump: openclaw.sql (12.4 MB)
Backing up Qdrant...
✓ Snapshot created: qdrant-snapshot.tar (45.2 MB)
Creating archive...
✓ Backup saved: /mnt/backups/openclaw-backup-2026-03-03-14-32-15.tar.gz (57.6 MB)
Backup complete!
List available backups
create-better-openclaw backup list
Output:
Available Backups:
openclaw-backup-2026-03-03-14-32-15.tar.gz 57.6 MB 2 hours ago
openclaw-backup-2026-03-02-10-15-42.tar.gz 56.8 MB 1 day ago
openclaw-backup-2026-03-01-03-00-00.tar.gz 54.2 MB 2 days ago
Total: 3 backups (168.6 MB)
Restore from backup
create-better-openclaw backup restore ./backups/openclaw-backup-2026-03-03-14-32-15.tar.gz
Output:
Restoring from backup...
⚠ Warning: This will overwrite existing data.
Stopping services...
✓ All services stopped
Extracting archive...
✓ Extracted to temp directory
Restoring PostgreSQL...
✓ Database restored: openclaw.sql
Restoring Qdrant...
✓ Snapshot restored
Starting services...
✓ postgres
✓ redis
✓ qdrant
✓ openclaw
Restore complete!
JSON output
create-better-openclaw backup create --json
Output:
{
"success": true,
"file": "./backups/openclaw-backup-2026-03-03-14-32-15.tar.gz",
"size": 60395520,
"timestamp": "2026-03-03T14:32:15Z",
"contents": [
{
"service": "postgres",
"file": "openclaw.sql",
"size": 13008896
},
{
"service": "qdrant",
"file": "qdrant-snapshot.tar",
"size": 47386624
}
]
}
create-better-openclaw backup list --json
Output:
{
"backups": [
{
"file": "openclaw-backup-2026-03-03-14-32-15.tar.gz",
"path": "./backups/openclaw-backup-2026-03-03-14-32-15.tar.gz",
"size": 60395520,
"created": "2026-03-03T14:32:15Z",
"age": "2h"
},
{
"file": "openclaw-backup-2026-03-02-10-15-42.tar.gz",
"path": "./backups/openclaw-backup-2026-03-02-10-15-42.tar.gz",
"size": 59572224,
"created": "2026-03-02T10:15:42Z",
"age": "1d"
}
],
"total": 2,
"totalSize": 119967744
}
Backup contents
Backups include:
PostgreSQL
- Full database dump (
pg_dump)
- Schema and data
- Sequences and indexes
Qdrant
- Vector database snapshot
- Collections and vectors
- Indexes and metadata
Configuration (optional)
.env file (secrets redacted)
- Custom configuration files
Not included
- Docker images
- Log files
- Temporary data
- Build artifacts
Use cases
Daily automated backups
#!/bin/bash
# Run daily at 3 AM via cron
# 0 3 * * * /opt/openclaw/backup.sh
cd /opt/my-stack
create-better-openclaw backup create --output /mnt/backups
# Keep only last 7 days
find /mnt/backups -name "openclaw-backup-*.tar.gz" -mtime +7 -delete
Pre-update backup
#!/bin/bash
echo "Creating backup before update..."
create-better-openclaw backup create
echo "Updating stack..."
if ! create-better-openclaw update; then
echo "Update failed! Restoring from backup..."
LATEST=$(create-better-openclaw backup list --json | jq -r '.backups[0].path')
create-better-openclaw backup restore "$LATEST"
exit 1
fi
echo "Update successful!"
Disaster recovery
# On original server
create-better-openclaw backup create --output /mnt/backup
scp /mnt/backup/openclaw-backup-*.tar.gz user@new-server:/tmp/
# On new server
create-better-openclaw generate my-stack --preset researcher
cd my-stack
create-better-openclaw backup restore /tmp/openclaw-backup-*.tar.gz
Migrate between environments
# Development to staging
cd ~/dev-stack
create-better-openclaw backup create
scp ./backups/openclaw-backup-*.tar.gz staging:/opt/staging-stack/backups/
# On staging
cd /opt/staging-stack
create-better-openclaw backup restore ./backups/openclaw-backup-*.tar.gz
Testing and rollback
# Before making changes
create-better-openclaw backup create
# Make changes, test
create-better-openclaw add ollama
docker compose up -d
# If issues, rollback
LATEST=$(create-better-openclaw backup list --json | jq -r '.backups[0].path')
create-better-openclaw backup restore "$LATEST"
Best practices
Backup frequency
- Production: Daily automated backups
- Development: Before major changes
- Staging: Before deployments
Retention policy
# Keep last 7 daily backups
find ./backups -name "*.tar.gz" -mtime +7 -delete
# Or keep last N backups
ls -t ./backups/*.tar.gz | tail -n +8 | xargs rm -f
Off-site storage
# Upload to S3
aws s3 cp ./backups/openclaw-backup-*.tar.gz s3://my-backups/openclaw/
# Or rsync to remote server
rsync -av ./backups/ user@backup-server:/backups/openclaw/
Verify backups
# Test restore in isolated environment
docker compose -f docker-compose.test.yml up -d
create-better-openclaw backup restore --dir ./test-stack ./backups/latest.tar.gz
# Verify data integrity
docker compose -f docker-compose.test.yml down
Monitor backup size
# Alert if backup size changes significantly
CURRENT_SIZE=$(ls -l ./backups/latest.tar.gz | awk '{print $5}')
LAST_SIZE=$(ls -l ./backups/previous.tar.gz | awk '{print $5}')
if [ $((CURRENT_SIZE - LAST_SIZE)) -gt 10485760 ]; then # 10MB threshold
echo "Warning: Backup size increased by >10MB"
fi
Troubleshooting
Backup fails: Permission denied
Ensure Docker containers have proper permissions:
sudo chown -R 999:999 ./data/postgres # PostgreSQL user
sudo chown -R 1000:1000 ./data/qdrant # Qdrant user
Backup takes too long
For large databases, consider:
- Incremental backups
- Compression level tuning
- Parallel dump/restore
Restore fails: Version mismatch
Ensure compatible versions:
# Check versions in backup metadata
tar -xzf backup.tar.gz metadata.json
cat metadata.json
# Match image versions
docker compose pull
Corrupted backup
Verify backup integrity:
# Check archive
tar -tzf backup.tar.gz > /dev/null
# Check SQL dump
tar -xzf backup.tar.gz openclaw.sql
psql -d postgres -f openclaw.sql --dry-run