MySQL数据库操作工具

通过MCP协议让AI Agent直接操作华为云RDS MySQL数据库的工具,提供SQL执行、表结构查询、性能分析等功能。

  • by ZhuQingping
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ZhuQingping/mysql-mcp-server

使用说明

Huawei RDS MySQL MCP Server

让 AI Agent(Cursor、Claude Code、Cherry Studio 等)通过 MCP 协议直接操作华为云 RDS MySQL 数据库。

功能一览

Tools(10 个)

工具 说明
execute_sql 执行 SQL 查询(写操作受安全开关控制)
list_databases 列出所有可访问的数据库
get_table_schema 获取表结构(字段名/类型/注释)
get_table_schema_with_relations 表结构 + 外键关系
explain_sql EXPLAIN 执行计划分析(支持 traditional/tree/json)
get_table_ddl 获取完整建表语句
get_slow_queries 查询慢日志记录
get_process_list 查看当前连接/线程
get_server_status 服务器状态摘要(连接数/QPS/InnoDB 指标)
get_table_stats 表的行数/大小/索引大小等统计

Resources & Templates

URI 说明
huawei-rds-mysql://tables 列出当前数据库所有表
huawei-rds-mysql://{table}/field 获取表字段信息
huawei-rds-mysql://{table}/data 获取表数据(默认 50 行)

快速开始

1. 安装依赖

# 进入项目目录
cd huawei-rds-mysql-mcp-server

# 创建虚拟环境(推荐)
python3 -m venv .venv
source .venv/bin/activate

# 安装依赖
pip install -e .

注意:如果遇到 SSL 证书错误,可手动安装依赖:

pip install mysql-connector-python sqlparse python-dotenv "mcp[cli]>=1.6.0"

2. 配置

支持两种配置方式,可以同时使用:

方式一:.env 文件(推荐)

在项目根目录创建 .env 文件:

# .env
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=test

服务启动时会按以下顺序查找 .env 文件(先找到先用):

  1. 当前工作目录下的 .env
  2. 项目根目录下的 .env
  3. 用户主目录下的 ~/.env

方式二:环境变量

export MYSQL_HOST=127.0.0.1
export MYSQL_PORT=3306
export MYSQL_USER=root
export MYSQL_PASSWORD=your_password
export MYSQL_DATABASE=test

优先级规则

环境变量 > .env 文件

当环境变量和 .env 文件中存在同名变量时,环境变量优先。 这意味着你可以在 .env 中写好默认配置,再用环境变量覆盖个别值(如 CI/CD 中覆盖密码)。

3. 启动服务

从项目根目录执行以下命令:

cd huawei-rds-mysql-mcp-server
uv venv
source .venv/bin/activate
cp .env.example .env # set env file with your database information
uv run src/rds_mysql_mcp_server/server.py

启动成功日志

正常启动后会看到类似输出:

INFO - huawei-rds-mysql-mcp-server - Loaded .env from: /path/to/.env (environment variables take precedence)
INFO - huawei-rds-mysql-mcp-server - Safety switches: INSERT=False, UPDATE=False, DELETE=False, DDL=False
INFO - huawei-rds-mysql-mcp-server - Database target: 127.0.0.1:3341/test as root
INFO - huawei-rds-mysql-mcp-server - Starting MCP SSE server on 127.0.0.1:8080/sse
INFO:     Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)

客户端配置

Cursor(SSE 模式)

先手动启动 MCP Server(参考上方"启动服务"),然后在项目根目录创建 .cursor/mcp.json:

{
  "mcpServers": {
    "huawei-rds-mysql": {
      "type": "sse",
      "url": "http://127.0.0.1:8080/sse"
    }
  }
}

Cursor(stdio 模式)

无需手动启动,Cursor 会自动拉起进程:

{
  "mcpServers": {
    "huawei-rds-mysql": {
      "command": "python3",
      "args": ["-m", "rds_mysql_mcp_server"],
      "env": {
        "PYTHONPATH": "/absolute/path/to/huawei-rds-mysql-mcp-server/src",
        "MYSQL_HOST": "127.0.0.1",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "root",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_DATABASE": "test",
        "RUN_MODE": "stdio"
      }
    }
  }
}

如果已 pip install -e .,可将 command 改为 "run_huawei_rds_mysql_mcp_server" 并删除 args 和 PYTHONPATH。

Claude Desktop

编辑 claude_desktop_config.json:

{
  "mcpServers": {
    "huawei-rds-mysql": {
      "command": "python3",
      "args": ["-m", "rds_mysql_mcp_server"],
      "env": {
        "PYTHONPATH": "/absolute/path/to/huawei-rds-mysql-mcp-server/src",
        "MYSQL_HOST": "127.0.0.1",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "root",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_DATABASE": "test",
        "RUN_MODE": "stdio"
      }
    }
  }
}

配置项一览

以下配置项可通过 .env 文件或环境变量设置(环境变量优先):

变量 说明 默认值 必填
MYSQL_HOST 数据库地址 127.0.0.1 否
MYSQL_PORT 数据库端口 3306 否
MYSQL_USER 数据库用户 — 是
MYSQL_PASSWORD 数据库密码 — 是
MYSQL_DATABASE 数据库名 — 是
MYSQL_ENABLE_INSERT 允许 INSERT false 否
MYSQL_ENABLE_UPDATE 允许 UPDATE false 否
MYSQL_ENABLE_DELETE 允许 DELETE false 否
MYSQL_ENABLE_DDL 允许 DDL false 否
RUN_MODE 运行模式 (sse / stdio) sse 否
SSE_BIND_HOST SSE 绑定地址 127.0.0.1 否
SSE_BIND_PORT SSE 绑定端口 8080 否

安全机制

默认只允许只读查询(SELECT / SHOW / DESCRIBE),写操作需显式开启。

可以在 .env 文件中配置:

# .env 中按需开启(不建议全部开启)
MYSQL_ENABLE_INSERT=true
MYSQL_ENABLE_DDL=true

或通过环境变量:

export MYSQL_ENABLE_INSERT=true
export MYSQL_ENABLE_DDL=true

此外还内置了:

  • SQL 注释剥离(防止注释绕过)
  • 危险模式检测(拦截 LOAD_FILE()、INTO OUTFILE)
  • sqlparse 操作类型识别

运行测试

测试分两类:

  • 单元测试(不需要数据库连接):SQL 安全检查、操作类型识别、配置解析等
  • 集成测试(需要真实 MySQL 连接):各 Tool 的端到端验证
# 1. 配置测试数据库连接
cp tests/.env.example tests/.env
# 编辑 tests/.env 填入真实的数据库连接信息

# 2. 运行全部测试(单元测试 + 集成测试)
uv run pytest tests/ -v

# 3. 只运行不需要数据库连接的单元测试
uv run pytest tests/ -v -k "not integration"

# 4. 运行指定测试类或测试方法
uv run pytest tests/ -v -k "TestCheckSqlSafety"
uv run pytest tests/test_server.py::TestIntegrationExecuteSql::test_integration_select_1 -v

注意:集成测试需要 DDL 权限(创建/删除临时测试表),请在 tests/.env 中设置 MYSQL_ENABLE_DDL=true。

项目结构

huawei-rds-mysql-mcp-server/
├── pyproject.toml              # 项目元数据与依赖
├── README.md                   # 本文档
├── src/
│   └── rds_mysql_mcp_server/
│       ├── __init__.py         # 包入口(导出 main)
│       ├── __main__.py         # 支持 python -m rds_mysql_mcp_server 启动
│       ├── server.py           # MCP 服务主体(工具/资源注册、路由、启动)
│       └── utils.py            # 配置加载(.env + 环境变量)、DB 连接、SQL 安全检查、结果格式化
├── tests/
│   ├── .env.example            # 环境变量模板
│   └── test_server.py          # 测试套件
└── docs/
    └── mysql-community-mcp-server-design.md  # 设计文档

License

Apache License 2.0