MySQL MCP 配置与用法
一、概述
MCP(Model Context Protocol)是一种让 AI 助手能够与外部工具和服务交互的协议。MySQL MCP Server 是专门用于连接 MySQL 数据库的 MCP 实现,让 AI 能够直接查询和操作数据库。
二、环境要求
2.1 基础环境
-
Python 3.8+
-
uv 或 pip 包管理工具
-
MySQL 5.7+ 或 MySQL 8.0+
2.2 推荐的 Python 环境
建议使用独立的 Python 环境,避免与系统 Python 冲突。
三、安装步骤
3.1 安装 uv(推荐)
# 使用 pip 安装 uv
pip install uv
# 或使用官方安装脚本(Linux/macOS)
curl -LsSf https://astral.sh/uv/install.sh | sh
3.2 安装 MySQL MCP Server
# 使用 pip 安装
pip install mysql-mcp-server
# 或使用 uv 安装
uv pip install --system mysql-mcp-server
# 如需指定版本
uv pip install --system mysql-mcp-server==0.2.2
3.3 推荐版本
mysql-connector-python 8.3.0 兼容性更好:
uv pip install --system mysql-connector-python==8.3.0
四、配置文件详解
4.1 基础配置
在 mcp.json 中配置 MySQL Server:
{
"mcpServers": {
"MySQL Server": {
"command": "uvx",
"args": [
"--from",
"mysql-mcp-server",
"mysql_mcp_server"
],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_username",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false",
"ALLOW_DDL_OPERATION": "false"
}
}
}
}
4.2 配置参数说明
|
参数 |
必需 |
说明 |
示例 |
|---|---|---|---|
|
|
✅ |
MySQL 主机地址 |
|
|
|
✅ |
MySQL 端口号 |
|
|
|
✅ |
数据库用户名 |
|
|
|
✅ |
数据库密码 |
|
|
|
✅ |
默认数据库名 |
|
|
|
❌ |
允许 INSERT 操作 |
|
|
|
❌ |
允许 UPDATE 操作 |
|
|
|
❌ |
允许 DELETE 操作 |
|
|
|
❌ |
允许 DDL 操作 |
|
4.3 替代配置方式(Python 方式)
{
"mcpServers": {
"MySQL Server": {
"command": "python",
"args": [
"-c",
"from mysql_mcp_server import main; main()"
],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_username",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false",
"ALLOW_DDL_OPERATION": "false"
}
}
}
}
五、核心用法:自然语言 + LLM 配合
5.1 什么是自然语言查询?
MySQL MCP 的核心价值在于让 AI 助手能够理解自然语言需求,自动转换为 SQL 查询并执行。这意味着您不需要写 SQL,只需要用日常语言描述您想要的数据。
5.2 自然语言查询示例
示例 1:基础数据查询
自然语言:
"查询 r_user 表中 company_id=2 且未删除的所有用户"
AI 自动生成的 SQL:
SELECT * FROM r_user WHERE company_id = 2 AND is_delete = 0
示例 2:关联查询
自然语言:
"查询角色为销售代表的人员,显示姓名、邮箱和公司ID"
AI 自动生成的 SQL:
SELECT
u.id,
u.nickname,
u.email,
u.company_id
FROM r_user u
INNER JOIN r_rbac_user_role ur ON u.id = ur.user_id
INNER JOIN r_rbac_role r ON ur.role_id = r.id
WHERE r.role_name = '销售代表'
AND u.is_delete = 0
示例 3:统计查询
自然语言:
"统计每个销售代表的工位数量,显示已审核和未审核的数量"
AI 自动生成的 SQL:
SELECT
u.nickname AS 销售代表,
COUNT(*) AS 工位总数,
SUM(CASE WHEN wst.status >= 3 THEN 1 ELSE 0 END) AS 已审核,
SUM(CASE WHEN wst.status < 3 THEN 1 ELSE 0 END) AS 未审核
FROM r_work_station_template wst
INNER JOIN r_user u ON wst.sales_representative_id = u.id
WHERE wst.company_id = 2
GROUP BY u.id, u.nickname
ORDER BY 工位总数 DESC
示例 4:带条件的查询
自然语言:
"查询工位需求表中已审核的需求,显示创建人姓名和工位名称,按创建时间倒序排列"
AI 自动生成的 SQL:
SELECT
wst.id,
wst.work_station_name,
u.nickname AS 创建人,
wst.status,
wst.gmt_create
FROM r_work_station_demand wst
INNER JOIN r_user u ON wst.creator_user_id = u.id
WHERE wst.company_id = 2
AND wst.status >= 3
AND wst.is_delete = 0
ORDER BY wst.gmt_create DESC
示例 5:复杂的排序需求
自然语言:
"查询图表列表,如果有迭代开发时间就按迭代时间排序,否则按创建时间排序,两个时间都要倒序"
AI 自动生成的 SQL:
SELECT
id,
name,
iteration_develop_time,
gmt_create
FROM r_charts_board
WHERE is_delete = 0
ORDER BY
(iteration_develop_time IS NOT NULL) DESC,
iteration_develop_time DESC,
gmt_create DESC
5.3 常用查询模板
模板 1:查看表结构
自然语言:
"查看 r_user 表的结构"
SQL:
DESCRIBE r_user
模板 2:查看前 N 条数据
自然语言:
"查看用户表的前 10 条数据"
SQL:
SELECT * FROM r_user LIMIT 10
模板 3:条件筛选
自然语言:
"查询入库数量为 2 的采购明细,计算价税合计之和"
SQL:
SELECT
COUNT(*) AS 记录数,
SUM(price * num) AS 价税合计之和
FROM r_purchase_into_storage_order_detail
WHERE num = 2
模板 4:分组统计
自然语言:
"按状态统计工位需求的数量"
SQL:
SELECT
status,
COUNT(*) AS 数量
FROM r_work_station_demand
WHERE is_delete = 0
GROUP BY status
模板 5:模糊查询
自然语言:
"查询用户名包含'销售'的用户"
SQL:
SELECT * FROM r_user
WHERE nickname LIKE '%销售%'
AND is_delete = 0
5.4 与 LLM 对话的技巧
技巧 1:明确指定表名和条件
推荐:
"查询 r_user 表中 company_id=2 且角色为销售代表的人员,显示姓名和邮箱"
模糊:
"查一下销售有哪些人" ❌
技巧 2:说明输出格式
推荐:
"查询销售代表列表,按工位数量降序排列,统计每个人创建的工位总数和已审核数量"
模糊:
"看看销售的情况" ❌
技巧 3:指定排序规则
推荐:
"查询图表列表,先按迭代时间倒序,再按创建时间倒序"
模糊:
"查一下图表" ❌
技巧 4:限定数据范围
推荐:
"查询公司ID=2的采购入库明细,只查入库数量=2的记录,计算价税合计之和"
模糊:
"查一下采购入库" ❌
5.5 常见业务场景对话
场景 1:人员管理
对话:
-
"查询所有销售代表人员"
-
"查看某个销售代表负责的所有工位"
-
"统计每个部门的员工数量"
场景 2:订单管理
对话:
-
"查询今天的采购入库单"
-
"统计每个供应商的订单金额"
-
"查看未审核的采购订单"
场景 3:数据分析
对话:
-
"查询工位需求按状态分布"
-
"统计本月新增客户数量"
-
"分析销售业绩排名"
5.6 自动 SQL 生成示例
用户需求 → AI 理解 → SQL 执行
Step 1: 用户输入自然语言
查询采购入库单表,入库数量为2的数据,并统计价税合计之和
Step 2: AI 自动分析
-
识别表:
r_purchase_into_storage_order_detail -
识别条件:
num = 2 -
识别字段:
price,num -
计算:
SUM(price * num)
Step 3: AI 生成并执行 SQL
SELECT
COUNT(*) AS 记录数,
SUM(price * num) AS 价税合计之和
FROM r_purchase_into_storage_order_detail
WHERE num = 2
Step 4: 返回结果
记录数:663
价税合计之和:174537.56
六、SQL 查询方法
6.1 基本查询
查询所有表:
SHOW TABLES
查询表结构:
DESCRIBE table_name
简单查询:
SELECT id, name, email
FROM users
WHERE status = 1
LIMIT 10
6.2 关联查询
SELECT
u.id,
u.nickname,
u.email,
r.role_name
FROM r_user u
INNER JOIN r_rbac_user_role ur ON u.id = ur.user_id
INNER JOIN r_rbac_role r ON ur.role_id = r.id
WHERE u.company_id = 2
AND u.is_delete = 0
6.3 聚合查询
SELECT
COUNT(*) as total_count,
SUM(amount) as total_amount,
AVG(price) as avg_price
FROM r_purchase_order_detail
WHERE quantity = 2
6.4 高级排序
按多字段排序:
SELECT
id,
name,
gmt_create,
iteration_develop_time
FROM r_charts_board
WHERE is_delete = 0
ORDER BY
(iteration_develop_time IS NOT NULL) DESC,
iteration_develop_time DESC,
gmt_create DESC
七、常见问题与解决方案
7.1 问题:pywin32 安装失败
错误信息:
error: Failed to install: pywin32-311.whl
Missing .dist-info directory
解决方案:
# 清理缓存
uv cache clean --force
# 重新安装 pywin32
pip uninstall pywin32 -y
pip install pywin32==306 --no-cache-dir
7.2 问题:uv pip 需要虚拟环境
错误信息:
error: No virtual environment found
解决方案:
# 添加 --system 参数
uv pip install --system mysql-mcp-server
# 或创建虚拟环境
uv venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
7.3 问题:mysql-connector-python 版本不兼容
错误信息:
Connection refused 或 连接超时
解决方案:
# 降级到稳定版本
uv pip install --system mysql-connector-python==8.3.0
7.4 问题:环境变量未传递
错误信息:
Missing required database configuration
MYSQL_USER, MYSQL_PASSWORD, and MYSQL_DATABASE are required
解决方案: 确保 mcp.json 配置文件中 env 部分正确配置所有必需参数。
7.5 问题:MCP 连接被关闭
错误信息:
mcp error: MCP tool invocation failed: Connection closed
解决方案:
-
重启 MCP 服务
-
检查数据库连接是否正常
-
重启 IDE
八、安全建议
8.1 生产环境建议
-
限制操作权限:
"ALLOW_INSERT_OPERATION": "false", "ALLOW_UPDATE_OPERATION": "false", "ALLOW_DELETE_OPERATION": "false", "ALLOW_DDL_OPERATION": "false" -
使用专用账号: 创建只读用户用于 MCP 连接:
CREATE USER 'mcp_readonly'@'%' IDENTIFIED BY 'strong_password'; GRANT SELECT ON database_name.* TO 'mcp_readonly'@'%'; FLUSH PRIVILEGES; -
网络隔离:
-
使用内网连接数据库
-
配置防火墙规则
-
使用 VPN 连接
-
8.2 配置示例(只读权限)
{
"mcpServers": {
"MySQL Server ReadOnly": {
"command": "uvx",
"args": [
"--from",
"mysql-mcp-server",
"mysql_mcp_server"
],
"env": {
"MYSQL_HOST": "your-host.internal",
"MYSQL_PORT": "3306",
"MYSQL_USER": "mcp_readonly",
"MYSQL_PASSWORD": "strong_password",
"MYSQL_DATABASE": "production_db",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false",
"ALLOW_DDL_OPERATION": "false"
}
}
}
}
九、实战案例
9.1 查询销售代表人员
SELECT
u.id AS 用户ID,
u.nickname AS 用户名,
u.email AS 邮箱,
r.role_name AS 角色
FROM r_user u
INNER JOIN r_rbac_user_role ur ON u.id = ur.user_id
INNER JOIN r_rbac_role r ON ur.role_id = r.id
WHERE r.role_name = '销售代表'
AND u.company_id = 2
AND u.is_delete = 0
9.2 统计工位需求
SELECT
u.nickname AS 销售代表,
COUNT(*) AS 工位数量,
SUM(CASE WHEN wst.status >= 3 THEN 1 ELSE 0 END) AS 已审核数量
FROM r_work_station_template wst
INNER JOIN r_user u ON wst.sales_representative_id = u.id
WHERE wst.company_id = 2
GROUP BY u.id, u.nickname
ORDER BY 工位数量 DESC
9.3 图表排序查询
SELECT
id,
name,
iteration_develop_time,
gmt_create
FROM r_charts_board
WHERE is_delete = 0
ORDER BY
(iteration_develop_time IS NOT NULL) DESC,
iteration_develop_time DESC,
gmt_create DESC
十、最佳实践
10.1 与 LLM 配合的最佳实践
-
清晰表达需求
-
✅ 使用具体的表名和字段
-
✅ 说明筛选条件
-
✅ 指定排序规则
-
✅ 说明输出格式
-
-
渐进式查询
-
✅ 先查看表结构
-
✅ 再查询少量数据
-
✅ 最后进行复杂统计
-
-
验证 AI 生成的 SQL
-
✅ 确认查询条件正确
-
✅ 检查字段映射
-
✅ 验证计算逻辑
-
-
迭代优化
-
✅ 根据结果调整查询
-
✅ 使用 LIMIT 限制数据量
-
✅ 添加索引优化性能
-
10.2 配置文件管理
-
使用版本控制管理
mcp.json -
敏感信息使用环境变量
-
定期更新密码
10.3 查询优化
-
始终添加
LIMIT限制结果集大小 -
使用适当的索引
-
避免全表扫描
10.4 错误处理
-
检查连接状态
-
验证 SQL 语法
-
处理 NULL 值
10.5 性能监控
-
监控慢查询
-
定期检查数据库性能
-
优化频繁访问的查询
十一、总结
MySQL MCP 为 AI 助手提供了强大的数据库访问能力,通过合理的配置和安全设置,可以在保证数据安全的前提下大大提高工作效率。
核心优势
-
自然语言查询:无需编写 SQL,直接用日常语言描述需求
-
自动生成 SQL:AI 自动分析需求并生成优化的 SQL 语句
-
即时反馈:实时查询和数据分析
-
降低门槛:让非技术人员也能进行数据库查询
关键要点:
-
✅ 使用
uv管理 Python 包更方便 -
✅ 推荐使用
mysql-connector-python==8.3.0 -
✅ 生产环境建议使用只读权限
-
✅ 配置文件需正确设置环境变量
-
✅ 遇到问题先检查数据库连接和包版本
-
✅ 善用自然语言与 LLM 配合,提高查询效率
-
✅ 提供清晰的需求描述,帮助 AI 生成准确的 SQL
参考资源
最后更新:2026年4月
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)