使用说明
MySQL MCP服务器
一个全面的模型上下文协议(MCP)服务器,用于MySQL数据库操作,具有数据库分析、健康监控和人工智能辅助数据库管理的高级功能。
🚀 特性
MySQL MCP服务器 超越了基本的CRUD操作,提供了强大的数据库分析功能和可扩展的自定义工具框架。
🔌 运输方式
- STDIO模式:与Cursor、Cline等MCP客户端直接集成
- SSE模式:web应用程序的基于HTTP的服务器发送事件
🗄️ 数据库操作
- 跨数据库访问:连接一次,无需切换连接即可访问所有数据库
- 多语句执行:执行多个用“;”分隔的SQL语句
- 智能表发现:按注释和描述查找表格
- SQL执行计划分析:性能优化见解
🛡️ 安全和权限
- 基于角色的访问控制:三个权限级别(只读、写入、管理)
- SQL注释支持:使用处理SQL语句
--和/* */评论
🔍 高级分析
- 健康监测:连接、事务和锁状态分析
- 性能洞察:索引使用分析和优化建议
- 锁检测:行级和表级锁监控
- 中文文本处理:中文字段名的拼音转换
🤖 人工智能集成
- 提示模板:用于数据库分析和查询的预构建AI提示
- 情境感知辅助:智能数据库操作指南
📋 权限级别
| 角色 | 权限 | 用例 |
|---|---|---|
| 只读 | SELECT, SHOW, DESCRIBE, EXPLAIN, USE |
报告和分析的只读访问 |
| 作家 | 只读+ INSERT, UPDATE, DELETE |
应用程序开发和数据操作 |
| 管理员 | 完整的数据库管理 | 包括DDL、用户管理、备份/恢复在内的完整数据库管理 |
🛠️ 可用工具
数据库操作
| 工具 | 说明 |
|---|---|
execute_sql |
使用基于角色的权限控制执行SQL语句 |
get_databases |
列出所有可用数据库(不包括系统数据库) |
架构发现
| 工具 | 说明 |
|---|---|
get_table_desc |
跨数据库获取表结构(支持 database.table 格式) |
get_table_index |
使用跨数据库支持检索表索引 |
get_table_name |
按注释和描述查找表格 |
性能与健康
| 工具 | 说明 |
|---|---|
get_db_health_running |
分析MySQL运行状况(连接、事务、锁) |
get_db_health_index_usage |
索引使用分析及性能建议 |
get_table_lock |
检测行级和表级锁 |
公用事业
| 工具 | 说明 |
|---|---|
get_chinese_initials |
将中文字段名转换为拼音首字母 |
🤖 AI提示模板
| 提示模板 | 目的 |
|---|---|
analyzing-mysql-prompt |
全面的MySQL问题分析和故障排除 |
query-table-data-prompt |
人工智能辅助的智能表格数据查询 |
🚀 快速开始
先决条件
- Python 3.10+
- UV包管理器
- MySQL服务器
安装
📦 安装UV包管理器
窗户:
# Using PowerShell (Recommended)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# Or using pip
pip install uv
# Or using Chocolatey
choco install uv
# Or using Scoop
scoop install uv
Linux/macOS:
# Using curl
curl -LsSf https://astral.sh/uv/install.sh | sh
# Or using pip
pip install uv
🔽 项目设置
-
克隆和安装依赖关系:
Windows(PowerShell):
git clone <repository-url> cd mcp_mysql uv syncLinux/macOS:
git clone <repository-url> cd mcp_mysql uv sync -
配置数据库连接:
创建一个
.env项目根目录中的文件:Windows(PowerShell):
# Create .env file using PowerShell @" # MySQL Database Configuration MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USER=your_username MYSQL_PASSWORD=your_password # MYSQL_DATABASE=specific_db # Optional: leave empty for cross-database access MYSQL_ROLE=admin # Options: readonly, writer, admin "@ | Out-File -FilePath ".env" -Encoding utf8或手动创建
.env包含内容的文件:# MySQL Database Configuration MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USER=your_username MYSQL_PASSWORD=your_password # MYSQL_DATABASE=specific_db # Optional: leave empty for cross-database access MYSQL_ROLE=admin # Options: readonly, writer, admin对于远程MySQL服务器(示例):
MYSQL_HOST=192.168.1.100 MYSQL_PORT=3306 MYSQL_USER=root MYSQL_PASSWORD=your_secure_password MYSQL_ROLE=admin
运行服务器
SSE模式(基于Web)
Windows(PowerShell):
# Start SSE server on http://localhost:9000
uv run server.py
Linux/macOS:
# Start SSE server on http://localhost:9000
uv run server.py
MCP客户端配置(SSE):
{
"mcpServers": {
"mysql": {
"name": "mysql",
"description": "MySQL database operations",
"isActive": true,
"baseUrl": "http://localhost:9000/sse"
}
}
}
STDIO模式(直接集成)
Windows(PowerShell):
# Start STDIO server
uv run server.py --stdio
Linux/macOS:
# Start STDIO server
uv run server.py --stdio
MCP客户端配置(STDIO):
窗户:
{
"mcpServers": {
"mysql": {
"name": "mysql",
"command": "uv",
"args": [
"--directory", "C:\\path\\to\\mcp_mysql\\src",
"run", "server.py", "--stdio"
],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_username",
"MYSQL_PASSWORD": "your_password",
"MYSQL_ROLE": "admin"
}
}
}
}
Linux/macOS:
{
"mcpServers": {
"mysql": {
"name": "mysql",
"command": "uv",
"args": [
"--directory", "/path/to/mcp_mysql/src",
"run", "server.py", "--stdio"
],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_username",
"MYSQL_PASSWORD": "your_password",
"MYSQL_ROLE": "admin"
}
}
}
}
🛠️ Windows特定配置说明
常见问题及解决方法
PowerShell执行策略: 如果遇到执行策略错误,请运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
路径分隔符:
- 使用双反睫毛
\\或正斜杠/JSON配置 - 例子:
"C:\\Users\\YourName\\mcp_mysql"或"C:/Users/YourName/mcp_mysql"
Windows中的环境变量:
# Set environment variables temporarily (current session)
$env:MYSQL_HOST = "localhost"
$env:MYSQL_USER = "your_username"
$env:MYSQL_PASSWORD = "your_password"
# Run the server with environment variables
uv run server.py --stdio
Windows防火墙: 如果连接到远程MySQL服务器,请确保MySQL端口(默认3306)允许通过Windows防火墙。
🔧 使用自定义工具进行扩展
-
创建新的工具类:
# src/handles/my_custom_tool.py from .base import BaseHandler from mcp.types import Tool, TextContent class MyCustomTool(BaseHandler): name = "my_custom_tool" description = "Description of what this tool does" def get_tool_description(self) -> Tool: # Define tool schema pass async def run_tool(self, arguments: dict) -> list[TextContent]: # Implement tool logic pass -
注册工具:
# src/handles/__init__.py from .my_custom_tool import MyCustomTool __all__ = [..., "MyCustomTool"]
💡 使用示例
跨数据库操作
列出所有数据库:
Use get_databases tool
跨数据库查询:
SELECT u.name, o.total
FROM users_db.users u
JOIN orders_db.orders o ON u.id = o.user_id;
表结构分析:
get_table_desc: "users_db.users,orders_db.orders"
人工智能辅助操作
性能分析:
Analyze this slow query and suggest optimizations:
SELECT * FROM large_table lt
LEFT JOIN another_table at ON lt.id = at.foreign_id
WHERE lt.created_date > '2024-01-01'
健康监测:
Check MySQL health status and identify any performance issues
智能表发现:
Find all tables related to user management across all databases
僵局分析:
Analyze why this UPDATE statement is stuck:
UPDATE users SET status = 'active' WHERE id = 123
📖 文档
🤝 贡献
- 分叉存储库
- 创建要素分支
- 添加您的自定义工具或改进
- 提交拉取请求
📄 许可证
这个项目是开源的。请检查许可证文件以了解详细信息。
如果您觉得此存储库有用,请将其标记为星号! ⭐