---
title: "Multi-Database"
---
Connect to multiple databases from a single DBHub instance using TOML configuration. Useful for:
- Managing production, staging, and development databases
- Working with databases across different cloud providers
- Querying multiple database types simultaneously
## Configuration
Create a `dbhub.toml` file:
```toml dbhub.toml
# Database sources
[[sources]]
id = "production"
dsn = "postgres://user:password@prod.example.com:5432/myapp"
[[sources]]
id = "staging"
dsn = "mysql://root:password@localhost:3306/myapp_staging"
[[sources]]
id = "local"
dsn = "sqlite:///./dev.db"
# Tool configuration
# Production: read-only execute_sql with row limit, plus search_objects
[[tools]]
name = "execute_sql"
source = "production"
readonly = true
max_rows = 1000
[[tools]]
name = "search_objects"
source = "production"
# Staging: full access with higher row limit
[[tools]]
name = "execute_sql"
source = "staging"
max_rows = 5000
[[tools]]
name = "search_objects"
source = "staging"
# Local: default tools (both execute_sql and search_objects)
# No [[tools]] entries = both tools enabled by default
```
Start DBHub:
```bash
# Automatically loads ./dbhub.toml
npx @bytebase/dbhub@latest --transport http --port 8080
# Or specify custom location
npx @bytebase/dbhub@latest --config=/path/to/config.toml
```
See [Server Options](/config/server-options) for detailed option descriptions and [Tool Configuration](/tools/overview#tool-configuration) for controlling which tools are available per source.
## Examples
<Tabs>
<Tab title="Using DSN">
```toml
[[sources]]
id = "production"
dsn = "postgres://user:pass@prod.example.com:5432/myapp"
[[sources]]
id = "staging"
dsn = "mysql://root:pass@localhost:3306/myapp_staging"
# Production: read-only with row limit
[[tools]]
name = "execute_sql"
source = "production"
readonly = true
max_rows = 1000
[[tools]]
name = "search_objects"
source = "production"
# Staging: full access (default tools)
# No [[tools]] for staging = both tools enabled
```
</Tab>
<Tab title="Individual Parameters">
```toml
[[sources]]
id = "production"
type = "postgres"
host = "prod.example.com"
port = 5432
database = "myapp"
user = "app_user"
password = "p@ss:word" # No URL encoding needed
[[tools]]
name = "execute_sql"
source = "production"
readonly = true
```
</Tab>
<Tab title="With SSH Tunnel">
```toml
[[sources]]
id = "production"
dsn = "postgres://user:pass@db.internal:5432/myapp"
ssh_host = "bastion.example.com"
ssh_user = "deploy"
ssh_key = "~/.ssh/id_rsa"
[[tools]]
name = "execute_sql"
source = "production"
readonly = true
[[tools]]
name = "search_objects"
source = "production"
```
</Tab>
</Tabs>
<Note>
The first `[[sources]]` entry is the default database used when no `id` is specified.
</Note>