用途
MySQL 只读查询技能用于对已配置的多个 MySQL 数据库执行安全、只读的查询。典型使用场景包括:查询 MySQL 数据库、探索数据库结构与表、查看表结构等。
主要能力
- 对多个已配置的 MySQL 数据库执行只读查询。
- 列出已配置的数据库、列出表、显示表结构。
- 支持结果行数限制。
- 根据数据库描述自动匹配用户意图进行数据库选择。
使用方式
环境要求
- Python 3.8+
- mysql-connector-python:
pip install -r requirements.txt
配置
在技能目录或 ~/.config/claude/mysql-connections.json 创建 connections.json。由于包含凭据,需设置文件权限为 600:
chmod 600 connections.json
配置示例:
{
"databases": [
{
"name": "production",
"description": "Main app database - users, orders, transactions",
"host": "db.example.com",
"port": 3306,
"database": "app_prod",
"user": "readonly_user",
"password": "your-password",
"ssl_disabled": false
}
]
}
配置字段:
| 字段 | 必填 | 说明 |
|---|---|---|
| name | 是 | 数据库标识符(不区分大小写) |
| description | 是 | 该数据库包含的数据说明(用于自动选择) |
| host | 是 | 数据库主机名 |
| port | 否 | 端口号(默认:3306) |
| database | 是 | 数据库名 |
| user | 是 | 用户名 |
| password | 是 | 密码 |
| ssl_disabled | 否 | 设为 true 禁用 SSL(默认:false) |
| ssl_ca | 否 | CA 证书文件路径 |
| ssl_cert | 否 | 客户端证书文件路径 |
| ssl_key | 否 | 客户端私钥文件路径 |
命令用法
列出已配置的数据库:
python3 scripts/query.py --list
查询数据库:
python3 scripts/query.py --db production --query "SELECT * FROM users LIMIT 10"
列出表:
python3 scripts/query.py --db production --tables
显示表结构:
python3 scripts/query.py --db production --schema
限制结果:
python3 scripts/query.py --db production --query "SELECT * FROM orders" --limit 100
数据库选择
将用户意图与数据库描述匹配:
| 用户询问 | 查找描述包含 |
|---|---|
| users, accounts | users, accounts, customers |
| orders, sales | orders, transactions, sales |
| analytics, metrics | analytics, metrics, reports |
| logs, events | logs, events, audit |
如果不明确,运行 --list 并询问用户选择哪个数据库。
安全特性
- 只读会话:连接使用 MySQL
SET SESSION TRANSACTION READ ONLY(主要保护)。 - 查询校验:仅允许 SELECT、SHOW、DESCRIBE、EXPLAIN、WITH 查询。
- 单语句:拒绝每次查询中的多条语句。
- SSL 支持:可配置 SSL,支持 CA、客户端证书和密钥。
- 查询超时:强制 30 秒
max_execution_time(MySQL 5.7.8+)。 - 内存保护:每次查询最多 10,000 行,防止 OOM。
- 列宽上限:每列最多 100 字符,保证输出可读。
- 凭据清理:错误消息不泄露密码。
故障排查
| 错误 | 解决方案 |
|---|---|
| Config not found | 在技能目录创建 connections.json |
| Authentication failed | 检查配置中的用户名/密码 |
| Connection timeout | 验证主机/端口,检查防火墙/VPN |
| SSL error | 对本地数据库尝试 "ssl_disabled": true |
| Permission warning | 运行 chmod 600 connections.json |
| max_execution_time not supported | 升级到 MySQL 5.7.8+ 或 MariaDB 10.1.1+ |
退出码
- 0:成功
- 1:错误(配置缺失、认证失败、无效查询、数据库错误)
工作流程
- 运行
--list显示可用数据库。 - 将用户意图与数据库描述匹配。
- 运行
--tables或--schema探索结构。 - 使用适当的 LIMIT 执行查询。
限制
- 仅支持只读查询,不允许写入或修改操作。
- 需要 Python 3.8+ 及 mysql-connector-python。
- 查询超时依赖 MySQL 5.7.8+ 或 MariaDB 10.1.1+。
- 每次查询最多返回 10,000 行。
- 其他未在资料中说明的功能、收费、价格、平台或效果暂未提供。