> 技术文档 > 日常开发记录MCP Server分享:MySQL_mysql-mcp-server

日常开发记录MCP Server分享:MySQL_mysql-mcp-server

基于 NodeJS 的 MySQL MCP 服务器

这是一个MCP服务器,提供对 MySQL 数据库的访问能力。该服务器允许大语言模型(LLMs)检查数据库模式并执行 SQL 查询。

工具
  1. mysql_query
    • 功能:对连接的数据库执行 SQL 查询
    • 输入:sql(字符串):需执行的 SQL 查询
    • 默认限制:仅限只读操作(SELECT)
    • 可选写操作(通过配置启用):
      • INSERT:向表中添加新数据(需设置ALLOW_INSERT_OPERATION=true)
      • UPDATE:修改现有数据(需设置ALLOW_UPDATE_OPERATION=true)
      • DELETE:删除数据(需设置ALLOW_DELETE_OPERATION=true)
    • 特性
      • 所有操作在事务中执行,支持正确提交 / 回滚
      • 支持预编译语句(Prepared Statements)以确保参数安全
      • 可配置查询超时和结果分页
      • 内置查询执行统计
资源

服务器提供全面的数据库信息:

  • 表模式
    • 每个表的 JSON 模式信息
    • 列名和数据类型
    • 索引信息和约束
    • 外键关系
    • 表统计和指标
  • 获取方式:自动从数据库元数据中发现

安全特性

  • SQL 注入预防:通过预编译语句实现
  • 查询白名单 / 黑名单:可配置允许 / 禁止的查询模式
  • 速率限制:限制每分钟查询次数
  • 查询复杂度分析:防止复杂查询耗尽资源
  • 连接加密:可配置 SSL/TLS 加密
  • 只读事务强制:默认禁止写操作,需显式启用

性能优化

  • 连接池优化:可配置连接池大小
  • 查询结果缓存:减少重复查询开销
  • 大结果集流处理:支持分页或流式返回大数据
  • 查询执行计划分析:帮助优化查询性能
  • 可配置查询超时:防止长时间阻塞

监控与调试

  • 全面查询日志:记录查询详情(需配置启用)
  • 性能指标收集:统计查询耗时、成功率等
  • 错误跟踪与报告:详细的错误信息输出
  • 健康检查端点:用于监控服务器状态
  • 查询执行统计:实时查看操作历史和性能数据

配置:环境变量

基础连接配置
  • MYSQL_SOCKET_PATH:本地连接的 Unix 套接字路径(如/tmp/mysql.sock)
  • MYSQL_HOST:MySQL 服务器主机(默认:127.0.0.1;若设置了套接字路径,则忽略此参数)
  • MYSQL_PORT:MySQL 服务器端口(默认:3306;若设置了套接字路径,则忽略此参数)
  • MYSQL_USER:MySQL 用户名(默认:root)
  • MYSQL_PASS:MySQL 密码
  • MYSQL_DB:目标数据库名称(留空以启用多数据库模式)
性能配置
  • MYSQL_POOL_SIZE:连接池大小(默认:10)
  • MYSQL_QUERY_TIMEOUT:查询超时时间(毫秒,默认:30000)
  • MYSQL_CACHE_TTL:缓存生存时间(毫秒,默认:60000)
安全配置
  • MYSQL_RATE_LIMIT:每分钟最大查询数(默认:100)
  • MYSQL_MAX_QUERY_COMPLEXITY:最大查询复杂度评分(默认:1000)
  • MYSQL_SSL:启用 SSL/TLS 加密(默认:false)
  • 写操作控制
    • ALLOW_INSERT_OPERATION:启用 INSERT 操作(默认:false)
    • ALLOW_UPDATE_OPERATION:启用 UPDATE 操作(默认:false)
    • ALLOW_DELETE_OPERATION:启用 DELETE 操作(默认:false)
    • ALLOW_DDL_OPERATION:启用 DDL 操作(如 CREATE、ALTER,默认:false)
  • 特定模式权限(格式:schema1:table1,schema2:table2):
    • SCHEMA_INSERT_PERMISSIONS:允许 INSERT 的表列表
    • SCHEMA_UPDATE_PERMISSIONS:允许 UPDATE 的表列表
    • SCHEMA_DELETE_PERMISSIONS:允许 DELETE 的表列表
    • SCHEMA_DDL_PERMISSIONS:允许 DDL 的表列表
  • MULTI_DB_WRITE_MODE:在多数据库模式下启用写操作(默认:false)
监控配置
  • MYSQL_ENABLE_LOGGING:启用查询日志(默认:false)
  • MYSQL_LOG_LEVEL:日志级别(默认:info,可选值:debug、warn、error)
  • MYSQL_METRICS_ENABLED:启用性能指标(默认:false)

多数据库模式

  • 当MYSQL_DB留空时,服务器支持访问多个数据库
  • 注意:写操作默认在多数据库模式下禁用,需设置MULTI_DB_WRITE_MODE=true以启用

特定模式权限

  • 可通过环境变量(如SCHEMA_INSERT_PERMISSIONS)按模式和表粒度配置权限
  • 格式示例:允许orders模式下的users表和logs模式下的events表执行 INSERT 操作:

SCHEMA_INSERT_PERMISSIONS=\"orders:users,logs:events\"  

测试与部署

推荐使用npm i @smcphub/client安装MCP客户端对所有MCP服务器进行集中管理。个人认为主要有以下几个优点,同时也是解决了如今MCP的几个痛点:

1. 不同的MCP Server认证方式多样

2. 编程语言多样化,有时候找到了想要的MCP Server,却无法集成到应用中

3. 还有老生常谈的问题,多个MCP Server的可维护性不好,降低开发效率

4. 没有调用日志,无法知晓MCP Server到底做了什么,甚至报错了也不知道原因

5. 各个MCP Server的实现方式不一,有的通过命令行参数启动,有的通过环境变量,有的直接输出所有结果,有的通过SSE方式

6. 就算集成了,也无法知晓用户的调用日志,也就没办法做后续的数据统计分析

7. 还有如果客户端集成MCP Server会增加应用程序打包尺寸,特别是手机应用客户端的大小

故障排除

  • 检查数据库连接参数(用户名、密码、端口等)
  • 确认 MySQL 用户权限是否匹配配置的操作(如是否允许写操作)
  • 查看日志文件以定位查询错误或性能问题