本指南将帮助您从安装到使用MCP MySQL服务器,实现数据库操作的便捷管理。
目录
引言
在现代化的软件开发流程中,数据库结构管理一直是一个关键挑战。开发团队需要在多个环境间同步数据库变更,运维团队需要追踪每一次结构修改,而合规要求则需要对所有数据库操作进行审计。为了解决这些痛点,我们很高兴地宣布 MCP MySQL Server v2.0.1 的发布,这个版本带来了革命性的 DDL 日志记录功能。
核心功能:智能 DDL 日志记录
什么是 DDL 日志记录?
DDL(Data Definition Language)日志记录是 v2.0.1 版本的核心新功能。它能够自动捕获所有成功的数据库结构变更操作,并将它们记录到一个专门的 SQL 文件中。这个功能不仅解决了数据库变更追踪的问题,更为团队协作和运维管理带来了全新的体验。
主要特性
🎯 仅记录成功操作
- 只有成功执行的 DDL 操作才会被记录到日志文件中
- 失败的 SQL 语句不会污染可执行文件,确保日志的纯净性
- 内存中仍保留完整的操作记录,便于调试和问题排查
⏰ 精确时间戳
- 每个 DDL 操作都包含精确到秒的时间戳注释
- 格式:
# 2025-09-08 15:24:36
- 便于追踪变更历史和进行时间线分析
🔧 自动格式化
- SQL 语句自动添加分号结尾
- 多行 SQL 语句保持完整格式
- 确保生成的日志文件可以直接执行
实际应用场景
数据库同步与部署
在微服务架构中,不同的服务可能需要访问相同的数据结构。通过 DDL 日志记录,开发团队可以轻松地将数据库结构变更从开发环境同步到测试、预发布和生产环境。生成的 ddl.sql
文件可以直接在目标环境中执行,确保所有环境的数据结构保持一致。
团队协作与代码审查
传统的数据库变更往往通过口头沟通或文档记录,容易出现遗漏和误解。现在,开发团队可以通过 DDL 日志文件清晰地了解每一次结构变更,将数据库变更与应用程序代码变更一起进行审查,提高协作效率。
合规与审计
对于需要满足合规要求的企业,DDL 日志记录提供了完整的数据库变更审计跟踪。每一次结构修改都有精确的时间戳记录,满足监管机构对数据库变更跟踪的要求。
技术实现亮点
新增工具支持
v2.0.1 版本新增了 get_ddl_sql_logs
工具,允许用户通过 MCP 协议查询 DDL 操作历史。这个工具支持分页查询,可以灵活地获取不同时间段的操作记录。
环境变量配置
通过 MCP_DDL_LOG_FILE
环境变量,用户可以自定义 DDL 日志文件的名称和位置,满足不同项目的需求。
向后兼容
新功能完全向后兼容,现有的 MCP MySQL Server 用户可以无缝升级到 v2.0.1 版本,无需修改任何配置。
使用示例
生成的 DDL 日志文件格式清晰易读:
sql
# 2025-09-08 15:24:36
CREATE TABLE test_v201_users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
# 2025-09-08 15:24:40
ALTER TABLE test_v201_users ADD COLUMN phone VARCHAR(20);
# 2025-09-08 15:24:44
CREATE INDEX idx_username_v201 ON test_v201_users(username);
功能特性
- ✅ 支持SQL查询执行(DDL和DML操作)
- ✅ 数据库信息获取与管理
- ✅ 完整的操作日志记录
- ✅ 智能连接池管理
- ✅ 自动重连机制
- ✅ 实时健康检查
- ✅ 强大的错误处理和恢复能力
安装步骤
方法一:全局安装(推荐)
bash
npm install -g @liangshanli/mcp-server-mysql
方法二:本地安装
bash
npm install @liangshanli/mcp-server-mysql
方法三:使用npx直接运行(无需安装)
bash
npx @liangshanli/mcp-server-mysql
配置方法
1. 创建配置文件
在您的项目根目录创建配置文件,根据您使用的编辑器选择合适的配置方式:
Trae AI 编辑器配置
在AI聊天窗体右上角设置中,选择MCP,手动添加以下代码,在内置智能体中选择@Builder with MCP:
json
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["@liangshanli/mcp-server-mysql"],
"env": {
"MYSQL_HOST": "your_host",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_user",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database",
"ALLOW_DDL": "false",
"ALLOW_DROP": "false",
"ALLOW_DELETE": "false",
"MCP_LOG_DIR": "D:\\mcp\\logs",
"MCP_LOG_FILE": "mcp-mysql.log",
"MCP_DDL_LOG_FILE": "ddl.sql"
}
}
}
}
VS Code 配置
- 安装 VS Code 的 MCP 扩展
- 创建
.vscode/settings.json
文件:
json
{
"mcp.servers": {
"@liangshanli/mcp-server-mysql": {
"command": "npx",
"args": [
"@liangshanli/mcp-server-mysql"
],
"env": {
"MYSQL_HOST": "sh-cynosdbmysql-grp-cv1drb1a.sql.tencentcdb.com",
"MYSQL_PORT": "21610",
"MYSQL_USER": "testuser",
"MYSQL_PASSWORD": "testusertestuser",
"MYSQL_DATABASE": "testtable",
"ALLOW_DDL": "true",
"ALLOW_DROP": "true",
"ALLOW_DELETE": "true",
"MCP_LOG_DIR": "D:\\mcp\\logs",
"MCP_LOG_FILE": "mcp-mysql.log",
"MCP_DDL_LOG_FILE": "ddl.sql"
}
}
}
}
Cursor 编辑器配置
在项目根目录创建 .cursor/mcp.json
文件:
json
{
"mcp.servers": {
"mysql": {
"command": "npx",
"args": ["@liangshanli/mcp-server-mysql"],
"env": {
"MYSQL_HOST": "your_host",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_user",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database",
"ALLOW_DDL": "false",
"ALLOW_DROP": "false",
"ALLOW_DELETE": "false",
"MCP_LOG_DIR": "D:\\mcp\\logs",
"MCP_LOG_FILE": "mcp-mysql.log",
"MCP_DDL_LOG_FILE": "ddl.sql"
}
}
}
}
2. 环境变量说明
变量名 | 说明 | 示例值 |
---|---|---|
MYSQL_HOST | MySQL主机地址 | sh-cynosdbmysql-grp-cv1drb1a.sql.tencentcdb.com |
MYSQL_PORT | MySQL端口 | 21610 |
MYSQL_USER | MySQL用户名 | testuser |
MYSQL_PASSWORD | MySQL密码 | testusertestuser |
MYSQL_DATABASE | 数据库名 | testtable |
ALLOW_DDL | 是否允许DDL操作 | true |
ALLOW_DROP | 是否允许DROP操作 | true |
ALLOW_DELETE | 是否允许DELETE操作 | true |
MCP_LOG_DIR | 日志目录 | ./logs |
MCP_LOG_FILE | 日志文件名 | mcp-mysql.log |
MCP_DDL_LOG_FILE | DDL SQL日志文件名 | ddl.sql |
连接服务器
自动连接(编辑器集成)
配置好MCP服务器后,编辑器会自动连接到服务器。您可以通过编辑器的AI助手直接使用数据库功能。
手动启动
如果需要手动启动服务器,可以使用以下命令:
bash
npx @liangshanli/mcp-server-mysql
服务器启动后,将通过stdin/stdout与MCP客户端通信。
使用示例
基本SQL查询
sql
-- 查询数据
SELECT * FROM users LIMIT 10;
-- 创建表
CREATE TABLE demo_products (
id INT PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
category VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入数据
INSERT INTO demo_products (product_name, price, category) VALUES
('智能手机', 4999.99, '电子产品'),
('笔记本电脑', 6999.00, '电子产品'),
('无线耳机', 899.00, '配件');
使用存储过程
sql
-- 创建存储过程
CREATE PROCEDURE update_product_stock(IN product_id INT, IN stock_change INT)
BEGIN
UPDATE demo_products
SET stock = stock + stock_change
WHERE id = product_id;
SELECT CONCAT('产品ID: ', product_id, ' 库存已更新,变化量: ', stock_change) AS message;
END;
-- 调用存储过程
CALL update_product_stock(1, -20);
可用工具
通过MCP服务器,您可以使用以下工具:
- sql_query: 执行SQL查询(支持DDL和DML操作)
- get_database_info: 获取数据库信息(数据库列表、表列表和配置信息)
- get_operation_logs: 获取操作日志
- get_ddl_sql_logs: 获取DDL SQL操作日志
- check_permissions: 检查数据库权限(DDL、DROP、DELETE等操作)
日志系统
常规日志
日志文件位置:./logs/mcp-mysql.log
记录内容:
- 所有请求和响应
- SQL操作记录
- 错误信息
- 连接池状态变化
DDL SQL日志
DDL日志文件位置:./logs/ddl.sql
功能特性:
- 仅记录成功的DDL操作
- 每个操作都包含精确的时间戳注释
- SQL语句自动格式化并添加分号结尾
- 可直接执行来重建数据库结构
示例格式:
sql
# 2024-01-15 14:23:45
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(100));
# 2024-01-15 14:24:12
ALTER TABLE users ADD COLUMN email VARCHAR(255);
常见问题
1. 连接失败
问题: 无法连接到MySQL服务器
解决方案:
- 检查主机名、端口、用户名和密码是否正确
- 确认MySQL服务器是否允许远程连接
- 检查网络连接和防火墙设置
2. 权限问题
问题: 执行某些操作时提示权限不足
解决方案:
- 检查环境变量中的权限设置(ALLOW_DDL、ALLOW_DROP、ALLOW_DELETE)
- 确认MySQL用户是否有足够的权限执行相应操作
3. 日志文件不存在
问题: 找不到日志文件
解决方案:
- 确认MCP_LOG_DIR目录是否存在,如不存在则创建
- 检查应用是否有写入日志目录的权限
许可证
MIT
MCP MySQL Server 是一个开源的 MCP 协议 MySQL 服务器,支持 DDL 操作、权限控制和操作日志记录。了解更多信息,请访问 GitHub 仓库。