Skip to content

Upgrade to v3.0

This guide covers migrating from db-sync-tool v2.x to v3.0. Version 3.0 includes significant improvements in security, performance, and developer experience, but also introduces breaking changes that may require action.

Breaking Changes

1. Python 3.10+ Required

What changed: Support for Python < 3.10 has been removed.

Action required:

bash
# Check your Python version
python3 --version

# If below 3.10, upgrade Python first
# macOS (Homebrew)
brew install python@3.12

# Ubuntu/Debian
sudo apt update && sudo apt install python3.12

# Then reinstall db-sync-tool
pip3 install --upgrade db-sync-tool-kmi

2. Typer CLI (argparse removed)

What changed: The CLI now uses Typer instead of argparse. Most commands remain compatible, but there are subtle differences.

Key differences:

  • Boolean flags now use --flag / --no-flag syntax
  • Shell completion is now built-in via --install-completion
  • Help output has a different format

Action required: Update any scripts using the old CLI:

bash
# Old (v2.x) - still works
db_sync_tool -f config.yaml -v -y

# New feature - shell completion
db_sync_tool --install-completion

Most existing scripts should continue to work without changes.

3. rsync is Default Transfer Method

What changed: rsync is now the default transfer method instead of SFTP, providing 5-10x faster transfers.

Action required:

If rsync is not available on your systems, db-sync-tool will automatically fall back to SFTP. No action needed.

If you experience issues:

bash
# Check if rsync is available
which rsync

# Install rsync if missing
# macOS
brew install rsync

# Ubuntu/Debian
sudo apt install rsync

# Or explicitly use SFTP in your config
# (add to config file)
transfer:
  method: sftp

4. SSH Host Key Verification Enabled

What changed: SSH connections now verify host keys by default to prevent man-in-the-middle attacks. This is a security improvement but may cause connection failures if host keys are not in your known_hosts file.

Symptoms:

Error: Host key for server 'example.com' not found

Action required:

Option A - Add host keys (recommended):

bash
# Add host key to known_hosts
ssh-keyscan -H example.com >> ~/.ssh/known_hosts

# Or connect manually once to accept the key
ssh user@example.com
# Type 'yes' when prompted, then exit

Option B - For multiple hosts, scan all at once:

bash
# Add multiple hosts
ssh-keyscan -H host1.example.com host2.example.com >> ~/.ssh/known_hosts

Option C - Verify existing keys:

bash
# Check if host is already known
ssh-keygen -F example.com

Security Note

Do NOT disable host key verification. It protects you from attackers intercepting your database credentials and data.

New Features in v3.0

After upgrading, you can take advantage of these new features:

Rich CLI Output

Modern terminal output with colors and progress indicators:

bash
db_sync_tool -f config.yaml

Output formats for different environments:

bash
# Interactive (default) - colored with spinners
db_sync_tool -f config.yaml --output=interactive

# CI/CD - GitHub Actions / GitLab CI compatible
db_sync_tool -f config.yaml --output=ci

# JSON - for parsing/automation
db_sync_tool -f config.yaml --output=json

# Quiet - minimal output
db_sync_tool -f config.yaml --output=quiet

Structured JSON Logging

For log aggregation systems (ELK, Splunk, etc.):

bash
db_sync_tool -f config.yaml -l /var/log/sync.log --json-log

File Synchronization

Sync files alongside your database:

yaml
# config.yaml
origin:
  host: production.example.com
  path: /var/www/html/typo3conf/LocalConfiguration.php
  files:
    - /var/www/html/fileadmin
    - /var/www/html/uploads

target:
  path: /var/www/local/typo3conf/LocalConfiguration.php
  files:
    - /var/www/local/fileadmin
    - /var/www/local/uploads
bash
# Sync database AND files
db_sync_tool -f config.yaml --with-files

# Sync only files (skip database)
db_sync_tool -f config.yaml --files-only

Auto-Discovery Configuration

No more specifying config file paths:

bash
# Automatically finds config in current directory
cd /path/to/project
db_sync_tool production local

Searches for configs in:

  • .db-sync-tool/
  • db-sync.yaml / db-sync.json
  • .db-sync.yaml / .db-sync.json

See Auto-Discovery for details.

Migration Checklist

  • [ ] Python version is 3.10 or higher
  • [ ] SSH host keys added to ~/.ssh/known_hosts for all remote hosts
  • [ ] rsync installed (or SFTP fallback is acceptable)
  • [ ] Updated any custom scripts using the CLI
  • [ ] Tested sync in dry-run mode: db_sync_tool -f config.yaml --dry-run

Troubleshooting

"Host key verification failed"

See SSH Host Key Verification above.

"rsync: command not found"

Install rsync or let it fall back to SFTP automatically.

"Python version not supported"

Upgrade to Python 3.10+. See Python 3.10+ Required.

Deprecation Warnings

If you see deprecation warnings from dependencies (e.g., Blowfish from paramiko), ensure you have the latest versions:

bash
pip3 install --upgrade db-sync-tool-kmi

Getting Help

Released under the MIT License.