mcp-dbutils
by donghao1393
Verified
- mcp-dbutils
- docs
# 配置示例集锦
本文档提供了MCP数据库工具的各种配置示例,从基础配置到高级场景,帮助您正确设置和优化数据库连接。
## 基础配置
### SQLite基础配置
SQLite是一种轻量级文件数据库,配置非常简单:
```yaml
connections:
my-sqlite:
type: sqlite
path: /path/to/database.db
# 可选:数据库加密密码
password: optional_encryption_password
```
### PostgreSQL基础配置
标准的PostgreSQL连接配置:
```yaml
connections:
my-postgres:
type: postgres
host: localhost
port: 5432
dbname: my_database
user: postgres_user
password: postgres_password
```
### MySQL基础配置
标准的MySQL连接配置:
```yaml
connections:
my-mysql:
type: mysql
host: localhost
port: 3306
database: my_database
user: mysql_user
password: mysql_password
charset: utf8mb4 # 推荐使用utf8mb4支持完整Unicode
```
## 多数据库配置
您可以在同一个配置文件中定义多个数据库连接:
```yaml
connections:
# 开发环境SQLite数据库
dev-db:
type: sqlite
path: /path/to/dev.db
# 测试环境PostgreSQL数据库
test-db:
type: postgres
host: test-postgres.example.com
port: 5432
dbname: test_db
user: test_user
password: test_pass
# 生产环境MySQL数据库
prod-db:
type: mysql
host: prod-mysql.example.com
port: 3306
database: prod_db
user: prod_user
password: prod_pass
charset: utf8mb4
```
## 高级配置
### URL风格配置
除了使用标准配置属性外,您还可以使用数据库URL进行部分配置。最佳实践是将数据库连接结构放在URL中,但将敏感信息和特定参数分开配置:
**PostgreSQL URL配置(推荐方式)**:
```yaml
connections:
# 使用URL配置PostgreSQL(最佳实践)
postgres-url:
type: postgres
url: postgresql://host:5432/dbname
user: postgres_user
password: postgres_password
# 其他参数在此配置
```
**MySQL URL配置(推荐方式)**:
```yaml
connections:
# 使用URL配置MySQL(最佳实践)
mysql-url:
type: mysql
url: mysql://host:3306/dbname
user: mysql_user
password: mysql_password
charset: utf8mb4
```
**传统URL配置方式**(不推荐用于生产环境):
虽然以下方式可行,但不建议在生产环境中使用,因为存在特殊字符解析错误的风险:
```yaml
connections:
legacy-url:
type: postgres
url: postgresql://user:password@host:5432/dbname?param1=value1
# 注意:不推荐在URL中包含凭据
```
**何时使用URL配置vs标准配置**:
- URL配置适合于:
- 当您已经有现成的数据库连接结构
- 需要在URL中包含特定连接参数
- 从其他系统迁移而来的连接配置
- 标准配置适合于:
- 更清晰的配置结构
- 需要单独管理每个配置属性
- 便于修改单个参数而不影响整体连接
- 更好的安全性和可维护性
在任何情况下,都应避免将敏感信息(如用户名、密码)包含在URL中,而应单独在配置参数中提供。
### SSL/TLS安全连接
#### PostgreSQL SSL配置
**使用URL参数的SSL配置**:
```yaml
connections:
pg-ssl-url:
type: postgres
url: postgresql://postgres.example.com:5432/secure_db?sslmode=verify-full&sslcert=/path/to/cert.pem&sslkey=/path/to/key.pem&sslrootcert=/path/to/root.crt
user: secure_user
password: secure_pass
```
**使用专属SSL配置部分**:
```yaml
connections:
pg-ssl-full:
type: postgres
host: secure-postgres.example.com
port: 5432
dbname: secure_db
user: secure_user
password: secure_pass
ssl:
mode: verify-full # 最安全的验证模式
cert: /path/to/client-cert.pem # 客户端证书
key: /path/to/client-key.pem # 客户端私钥
root: /path/to/root.crt # CA证书
```
**PostgreSQL SSL模式说明**:
- `disable`: 完全不使用SSL(不推荐用于生产环境)
- `require`: 使用SSL但不验证证书(仅加密,无身份验证)
- `verify-ca`: 验证服务器证书是由受信任的CA签名
- `verify-full`: 验证服务器证书和主机名匹配(最安全选项)
#### MySQL SSL配置
**使用URL参数的SSL配置**:
```yaml
connections:
mysql-ssl-url:
type: mysql
url: mysql://mysql.example.com:3306/secure_db?ssl-mode=verify_identity&ssl-ca=/path/to/ca.pem&ssl-cert=/path/to/client-cert.pem&ssl-key=/path/to/client-key.pem
user: secure_user
password: secure_pass
```
**使用专属SSL配置部分**:
```yaml
connections:
mysql-ssl-full:
type: mysql
host: secure-mysql.example.com
port: 3306
database: secure_db
user: secure_user
password: secure_pass
charset: utf8mb4
ssl:
mode: verify_identity # 最安全的验证模式
ca: /path/to/ca.pem # CA证书
cert: /path/to/client-cert.pem # 客户端证书
key: /path/to/client-key.pem # 客户端私钥
```
**MySQL SSL模式说明**:
- `disabled`: 不使用SSL(不推荐用于生产环境)
- `preferred`: 如果可用就使用SSL,否则使用非加密连接
- `required`: 必须使用SSL,但不验证服务器证书
- `verify_ca`: 验证服务器证书是由受信任的CA签名
- `verify_identity`: 验证服务器证书和主机名匹配(最安全选项)
### SQLite高级配置
**使用URI参数**:
```yaml
connections:
sqlite-advanced:
type: sqlite
path: /path/to/db.sqlite?mode=ro&cache=shared&immutable=1
```
**常用SQLite URI参数**:
- `mode=ro`: 只读模式(安全选项)
- `cache=shared`: 共享缓存模式,提高多线程性能
- `immutable=1`: 标记数据库为不可变,提高性能
- `nolock=1`: 禁用文件锁定(仅当确定没有其他连接时使用)
## Docker环境特殊配置
在Docker容器中运行时,连接到主机上的数据库需要特殊配置:
### 连接主机上的PostgreSQL/MySQL
**在macOS/Windows上**:
使用特殊主机名`host.docker.internal`来访问Docker主机:
```yaml
connections:
docker-postgres:
type: postgres
host: host.docker.internal # 特殊DNS名称指向Docker主机
port: 5432
dbname: my_database
user: postgres_user
password: postgres_password
```
**在Linux上**:
使用Docker网桥IP或使用host网络模式:
```yaml
connections:
docker-mysql:
type: mysql
host: 172.17.0.1 # Docker默认网桥IP,指向主机
port: 3306
database: my_database
user: mysql_user
password: mysql_password
```
或者使用`--network="host"`启动Docker容器,然后使用`localhost`作为主机名。
### SQLite映射
对于SQLite,需要将数据库文件映射到容器中:
```bash
docker run -i --rm \
-v /path/to/config.yaml:/app/config.yaml \
-v /path/to/database.db:/app/database.db \
mcp/dbutils --config /app/config.yaml
```
然后在配置中指向映射的路径:
```yaml
connections:
docker-sqlite:
type: sqlite
path: /app/database.db # 容器内的路径,而非主机路径
```
## 常见配置场景
### 多环境管理
一种良好实践是为不同环境使用清晰的命名约定:
```yaml
connections:
# 开发环境
dev-postgres:
type: postgres
host: localhost
port: 5432
dbname: dev_db
user: dev_user
password: dev_pass
# 测试环境
test-postgres:
type: postgres
host: test-server.example.com
port: 5432
dbname: test_db
user: test_user
password: test_pass
# 生产环境
prod-postgres:
type: postgres
host: prod-db.example.com
port: 5432
dbname: prod_db
user: prod_user
password: prod_pass
ssl:
mode: verify-full
cert: /path/to/cert.pem
key: /path/to/key.pem
root: /path/to/root.crt
```
### 只读与分析专用配置
对于数据分析场景,建议使用只读账户和优化的配置:
```yaml
connections:
analytics-mysql:
type: mysql
host: analytics-db.example.com
port: 3306
database: analytics
user: analytics_readonly # 使用只读权限账户
password: readonly_pass
charset: utf8mb4
# 设置较长的超时时间,适合数据分析
```
## 故障排除提示
如果连接配置无法工作,请尝试:
1. **验证基本连接**:使用数据库原生客户端验证连接是否可行
2. **检查网络连接**:确保网络端口开放,防火墙允许访问
3. **验证凭据**:确认用户名和密码正确
4. **路径问题**:对于SQLite,确保路径存在且有读取权限
5. **SSL错误**:检查证书路径和权限,验证证书是否过期
## 实际配置示例
### 全面开发环境配置
```yaml
connections:
# 本地开发数据库
local-dev:
type: sqlite
path: ./development.db
# 本地PostgreSQL
local-pg:
type: postgres
host: localhost
port: 5432
dbname: dev_db
user: dev_user
password: dev_pass
# 本地MySQL
local-mysql:
type: mysql
host: localhost
port: 3306
database: dev_db
user: dev_user
password: dev_pass
charset: utf8mb4
# 远程测试数据库(带SSL)
remote-test:
type: postgres
host: test-db.example.com
port: 5432
dbname: test_db
user: test_user
password: test_pass
ssl:
mode: require # 测试环境使用基本SSL
# 生产只读副本(最高安全级别)
prod-readonly:
type: postgres
host: prod-readonly.example.com
port: 5432
dbname: prod_db
user: readonly_user
password: readonly_pass
ssl:
mode: verify-full # 生产环境使用完整验证
cert: /path/to/client-cert.pem
key: /path/to/client-key.pem
root: /path/to/root.crt
```