本指南帮助您在 Windows 环境下配置 Cursor 编辑器的 MySQL MCP 服务器,实现通过 AI 助手对数据库进行完整的增删改查操作。
功能特性:
# 检查必要组件
node --version # Node.js >= 16
mysql --version # MySQL 5.7+
cursor --version # Cursor 最新版
# 全局安装(推荐)
npm install -g @benborla29/mcp-server-mysql
# 或使用 npx 直接运行
npx -y @benborla29/mcp-server-mysql
-- 创建完整操作权限用户
CREATE USER 'cursor_mcp'@'%' IDENTIFIED BY 'YourSecurePassword123!';
-- 授予完整数据操作权限
GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'cursor_mcp'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 验证权限
SHOW GRANTS FOR 'cursor_mcp'@'%';
在项目根目录创建 .cursor/mcp.json
文件:
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": [
"-y",
"@benborla29/mcp-server-mysql"
],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "cursor_mcp",
"MYSQL_PASS": "YourSecurePassword123!",
"MYSQL_DB": "your_database",
"ALLOW_INSERT_OPERATION": "true",
"ALLOW_UPDATE_OPERATION": "true",
"ALLOW_DELETE_OPERATION": "true",
}
}
}
}
# PowerShell 环境变量测试
$env:MYSQL_HOST="localhost"
$env:MYSQL_USER="cursor_mcp"
$env:MYSQL_PASS="YourSecurePassword123!"
$env:MYSQL_DB="your_database"
$env:ALLOW_INSERT_OPERATION="true"
$env:ALLOW_UPDATE_OPERATION="true"
$env:ALLOW_DELETE_OPERATION="true"
npx -y @benborla29/mcp-server-mysql
mysql
服务器状态为绿色显示数据库中的所有表
"显示所有用户表的记录"
"查询最近7天注册的用户"
"统计每个部门的员工数量"
"分析上个月的销售趋势"
"找出最受欢迎的产品类型"
"在用户表中添加新用户:姓名'张三',邮箱'[email protected]',部门'开发部'"
"批量插入测试数据:
- 用户1:李四,[email protected],销售部
- 用户2:王五,[email protected],市场部"
"创建一个新订单,客户ID为123,产品ID为456,数量为2"
"将用户ID为100的用户状态改为'已激活'"
"把所有'待处理'状态的订单改为'处理中'"
"将价格低于100元的产品价格统一上涨10%"
"更新所有过期的会员卡状态为'已过期'"
"删除创建时间超过30天的测试数据"
"清理所有状态为'已取消'的订单记录"
"移除邮箱为空的无效用户记录"
"删除ID为999的用户及其相关数据"
"创建月度销售报告,包含每个销售员的业绩排名"
"分析用户行为,找出最常购买的产品组合"
"清理重复数据:删除邮箱相同但ID不同的用户记录,保留最早注册的"
"批量更新库存:将库存为0的产品状态改为'缺货'"
-- 生产环境:限制危险操作
CREATE USER 'cursor_prod'@'%' IDENTIFIED BY 'SuperSecurePassword456!';
-- 只授予数据操作权限,不包含结构修改
GRANT SELECT, INSERT, UPDATE, DELETE ON production_db.* TO 'cursor_prod'@'%';
-- 特别限制:不允许DROP, ALTER, CREATE等结构操作
-- 这些权限默认不会被授予
FLUSH PRIVILEGES;
{
"mcpServers": {
"mysql_dev": {
"command": "npx",
"args": ["-y", "@benborla29/mcp-server-mysql"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_DB": "development_db",
"MYSQL_USER": "dev_user",
"MYSQL_PASS": "dev_password",
"ALLOW_INSERT_OPERATION": "true",
"ALLOW_UPDATE_OPERATION": "true",
"ALLOW_DELETE_OPERATION": "true"
}
},
"mysql_prod": {
"command": "npx",
"args": ["-y", "@benborla29/mcp-server-mysql"],
"env": {
"MYSQL_HOST": "prod-server.example.com",
"MYSQL_DB": "production_db",
"MYSQL_USER": "prod_readonly",
"MYSQL_PASS": "prod_password",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false"
}
}
}
}
{
"env": {
"MYSQL_HOST": "remote-db.example.com",
"MYSQL_PORT": "3306",
"MYSQL_SSL": "true",
"MYSQL_SSL_CA": "/path/to/ca-cert.pem",
"MYSQL_SSL_CERT": "/path/to/client-cert.pem",
"MYSQL_SSL_KEY": "/path/to/client-key.pem"
}
}
{
"env": {
"MYSQL_POOL_SIZE": "20",
"MYSQL_QUERY_TIMEOUT": "60000",
"MYSQL_CACHE_TTL": "300000",
"MYSQL_RATE_LIMIT": "200",
"MYSQL_MAX_QUERY_COMPLEXITY": "2000"
}
}
{
"env": {
"ENABLE_LOGGING": "true",
"MYSQL_LOG_LEVEL": "info",
"MYSQL_METRICS_ENABLED": "true",
"DEBUG": "mcp:*"
}
}
{
"env": {
"MYSQL_HOST": "192.168.1.100",
"MYSQL_PORT": "3306",
"MYSQL_CONNECTION_TIMEOUT": "10000",
"MYSQL_RECONNECT": "true",
"MYSQL_CHARSET": "utf8mb4"
}
}
-- ✅ 推荐:精确权限控制
GRANT SELECT, INSERT, UPDATE, DELETE ON specific_database.* TO 'cursor_user'@'%';
-- ❌ 避免:过度权限
-- GRANT ALL PRIVILEGES ON *.* TO 'cursor_user'@'%';
-- ✅ 推荐:特定表权限
GRANT SELECT ON sensitive_table TO 'cursor_user'@'%';
GRANT INSERT, UPDATE ON regular_table TO 'cursor_user'@'%';
# 检查防火墙规则
netsh advfirewall firewall show rule name="MySQL"
# 限制访问IP(MySQL配置)
# bind-address = 127.0.0.1 # 仅本地
# bind-address = 192.168.1.0/24 # 仅内网
-- 设置强密码策略
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
-- 定期更换密码
ALTER USER 'cursor_mcp'@'%' IDENTIFIED BY 'NewSecurePassword789!';
FLUSH PRIVILEGES;
-- 启用查询日志
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/cursor_mcp.log';
-- 启用慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
// diagnose-mcp.js
const mysql = require('mysql2/promise');
async function testConnection() {
const config = {
host: process.env.MYSQL_HOST || 'localhost',
port: process.env.MYSQL_PORT || 3306,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASS,
database: process.env.MYSQL_DB
};
try {
console.log(' 测试数据库连接...');
const connection = await mysql.createConnection(config);
console.log('✅ 连接成功!');
// 测试权限
const [tables] = await connection.execute('SHOW TABLES');
console.log(' 可访问的表:', tables.length);
// 测试插入权限
try {
await connection.execute('CREATE TEMPORARY TABLE test_permissions (id INT)');
await connection.execute('INSERT INTO test_permissions VALUES (1)');
console.log('✅ INSERT 权限正常');
await connection.execute('UPDATE test_permissions SET id = 2 WHERE id = 1');
console.log('✅ UPDATE 权限正常');
await connection.execute('DELETE FROM test_permissions WHERE id = 2');
console.log('✅ DELETE 权限正常');
} catch (error) {
console.log('⚠️ 写权限受限:', error.message);
}
await connection.end();
} catch (error) {
console.error('❌ 连接失败:', error.message);
}
}
// 设置环境变量后运行
testConnection();
# 设置环境变量
$env:MYSQL_HOST="localhost"
$env:MYSQL_USER="cursor_mcp"
$env:MYSQL_PASS="YourPassword"
$env:MYSQL_DB="your_database"
# 安装依赖并运行诊断
npm install mysql2
node diagnose-mcp.js
.cursor/mcp.json
配置正确{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["-y", "@benborla29/mcp-server-mysql"],
"env": {
"MYSQL_HOST": "YOUR_HOST",
"MYSQL_PORT": "YOUR_PORT",
"MYSQL_USER": "YOUR_USERNAME",
"MYSQL_PASS": "YOUR_PASSWORD",
"MYSQL_DB": "YOUR_DATABASE",
"ALLOW_INSERT_OPERATION": "true",
"ALLOW_UPDATE_OPERATION": "true",
"ALLOW_DELETE_OPERATION": "true",
"ALLOW_CREATE_OPERATION": "true",
"ALLOW_ALTER_OPERATION": "true",
"ALLOW_DROP_OPERATION": "true",
"MYSQL_SSL": "false",
"MYSQL_POOL_SIZE": "10",
"MYSQL_QUERY_TIMEOUT": "30000",
"PATH": "C:\\Program Files\\nodejs;C:\\Windows\\System32"
}
}
}
}
"创建用户测试数据,包含10个不同部门的员工"
"为所有测试订单添加随机的创建时间"
"清理开发环境中的过期session数据"
"分析用户注册趋势,按月统计最近一年的数据"
"找出回购率最高的客户群体"
"生成产品销量排行榜,包含销售额和利润率"
"批量更新用户头像URL,将HTTP改为HTTPS"
"合并重复的商品记录,保留最新的价格信息"
"归档6个月前的订单数据到历史表"
"生成月度财务报表,包含收入、支出和利润"
"创建库存预警报告,显示低于安全库存的商品"
"统计客服工单处理效率,按处理人员分组"
配置完成后,您将获得:
效率提升
️ 安全可靠
灵活强大
现在您可以在 Cursor 中直接对话AI,让它帮您完成各种数据库操作,从简单查询到复杂的数据分析,都能通过自然语言轻松实现!