AI自然语言管理MySQL之Dify+MCP

一、认识自然语言管理数据库

1.1 从SQL到自然语言

使用 SQL 管理 cnblogs_y1018 数据库。部署 Dify 和 MySQL MCP,再用自然语言操作同一张 students 表。

查询北京有哪些学员

image

数据仍然保存在MySQL中。Dify负责理解问题,MCP负责连接数据库。

1.2 认识MCP、Agent和Dify

  • MCP:把数据库等外部能力提供给Agent。
  • Agent:会根据任务选择工具的AI助手。
  • Dify:创建和运行AI应用的平台。

image

MySQL MCP 提供三个工具:

工具 用途
get_schema_info 查看数据库、数据表和字段
get_table_sample 查看表中的少量示例数据
execute_sql 执行查询、添加、修改和删除

image

二、准备实验环境

2.1 准备两台机器

系统 主机 IP地址 用途
Ubuntu 数据库 192.168.31.222 cnblogs_y1018 数据库
Rocky AI机 192.168.31.225 运行 Docker、Dify 和 MySQL MCP

2.2 在AI机上安装Docekr CE

连接AI机192.168.31.225操作如下步骤:

Docker CE安装参考

三、部署Dify

3.1 认识Docker Compose

Dify由多个容器共同组成,如果逐个输入命令,操作会比较多。Docker Compose读取一个配置文件,一次启动或停止一组容器

image

命令详解:

docker compose up -d
docker compose ps
docker compose down
  • up -d 在后台启动整个容器
  • ps 查看整个容器的运行状态
  • down 停止并删除整个容器

3.2 获取Dify项目软件

上传软件dify-1.17.1.tar.gz到AI机

tar zxvf dify-1.17.1.tar.gz  -C /opt/
cd /opt/dify/docker

3.3 准备配置文件

cp .env.example .env

允许Dify访问实验网段中的MCP服务:

sed -i 's/^SSRF_PROXY_ALLOW_PRIVATE_IPS=.*/SSRF_PROXY_ALLOW_PRIVATE_IPS=192.168.31.0\/24/' .env
  • SSRF_PROXY_ALLOW_PRIVATE_IPS: 允许Dify访问192.168.31.0/24网段

3.4 上传并导入Dify镜像

上传软件dify-all-images-1.17.1.tar到AI机

导入Dify镜像:

[root@AIDify ~]# docker load -i dify-all-images-1.17.1.tar
Loaded image: langgenius/dify-api:1.17.1
Loaded image: langgenius/dify-web:1.17.1
Loaded image: redis:6-alpine
Loaded image: langgenius/dify-sandbox:0.2.15
Loaded image: langgenius/dify-agent-local-sandbox:1.17.1
Loaded image: nginx:latest
Loaded image: langgenius/dify-api:1.17.1
Loaded image: langgenius/dify-api:1.17.1
Loaded image: ubuntu/squid:latest
Loaded image: ubuntu/squid:latest
Loaded image: busybox:latest
Loaded image: langgenius/dify-plugin-daemon:0.6.10-local
Loaded image: cr.weaviate.io/semitechnologies/weaviate:1.39.2
Loaded image: langgenius/dify-agent-backend:1.17.1
Loaded image: langgenius/dify-api:1.17.1
Loaded image: postgres:15-alpine
[root@AIDify ~]#

3.5 启动Dify

[root@AIDify ~]# cd /opt/dify/docker/
[root@AIDify docker]# docker compose up -d
[+] up 22/22
 ✔ Network docker_agent_sandbox_network             Created                                                                                            0.2s
 ✔ Network docker_default                           Created                                                                                            0.1s
 ✔ Network docker_local_sandbox_proxy_network       Created                                                                                            0.3s
 ✔ Network docker_ssrf_proxy_network                Created                                                                                            0.2s
 ✔ Volume docker_dify_agent_local_sandbox_home      Created                                                                                            0.0s
 ✔ Volume docker_dify_agent_local_sandbox_workspace Created                                                                                            0.0s
 ✔ Container docker-init_permissions-1              Exited                                                                                             5.7s
 ✔ Container docker-weaviate-1                      Started                                                                                            1.2s
 ✔ Container docker-db_postgres-1                   Healthy                                                                                            5.7s
 ✔ Container docker-redis-1                         Started                                                                                            1.5s
 ✔ Container docker-web-1                           Started                                                                                            1.7s
 ✔ Container docker-sandbox-1                       Started                                                                                            0.5s
 ✔ Container docker-ssrf_proxy-1                    Started                                                                                            0.9s
 ✔ Container docker-api_websocket-1                 Started                                                                                            4.1s
 ✔ Container docker-worker_beat-1                   Started                                                                                            4.4s
 ✔ Container docker-plugin_daemon-1                 Started                                                                                            4.7s
 ✔ Container docker-agent_backend-1                 Started                                                                                            5.0s
 ✔ Container docker-agent_ssrf_proxy-1              Started                                                                                            2.5s
 ✔ Container docker-local_sandbox-1                 Started                                                                                            1.9s
 ✔ Container docker-worker-1                        Started                                                                                            5.7s
 ✔ Container docker-api-1                           Started                                                                                            6.0s
 ✔ Container docker-nginx-1                         Started                                                                                            6.5s
[root@AIDify docker]#

查看运行状态:

[root@AIDify docker]# docker compose ps

3.6 访问Dify

浏览器输入:http://192.168.31.225

首次打开设置管理员账户,进入Dify主页

image
image
image

3.7 配置大模型

点击 集成 -> 模型供应商 搜索deepseek安装

image
image

安装完成后,填写API Key并保存

image
image

如果安装失败,直接访问官网DeepSeek插件下载
image

本地安装插件 langgenius-deepseek_0.0.26.difypkg
image

四、部署并连接MySQL MCP

4.1 在数据库上准备MCP账号

连接数据库192.168.31.222操作步骤如下:

打开MySQL配置文件

root@mysql:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0
skip-name-resolve
mysqlx-bind-address     = 127.0.0.1

bind-address:允许AI机连接MySQL
skip-name-resolve:连接时不解析主机名,速度快
mysqlx-bind-address:X Protocol(33060)只监听本机

重启MySQL并检查配置:

root@mysql:~# systemctl restart mysql
root@mysql:~# systemctl is-active mysql
active
root@mysql:~# mysql -e "SHOW VARIABLES LIKE 'skip_name_resolve';"
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| skip_name_resolve | ON    |
+-------------------+-------+
root@mysql:~# ss -lntp | grep 3306
LISTEN 0      70         127.0.0.1:33060      0.0.0.0:*    users:(("mysqld",pid=3187,fd=21))                     
LISTEN 0      151          0.0.0.0:3306       0.0.0.0:*    users:(("mysqld",pid=3187,fd=23))                     
root@mysql:~#

查看服务状态为active/skip_name_resolve为ON,出现0.0.0.0:3306,说明MySQL可以接受网络连接。AI机连接地址:192.168.31.222:3306

查看防火墙ufw status已启动,只允许AI机访问MySQL:

ufw allow from 192.168.31.225 to any port 3306 proto tcp
# 如果本地Windows要连接可修改为192.168.31.0/24

创建只允许AI机连接的专用账号:

CREATE USER IF NOT EXISTS 'mcp_rw'@'192.168.31.225'
IDENTIFIED BY 'YangQing@123';

GRANT SELECT, INSERT, UPDATE, DELETE
ON cnblogs_y1018.*
TO 'mcp_rw'@'192.168.31.225';

SHOW GRANTS FOR 'mcp_rw'@'192.168.31.225';
EXIT;

这个账号只能操作 cnblogs_y1018 数据库中的数据

导入示例数据

mysql -u root -p < cnblogs_y1018.sql

4.2 在AI机部署 MySQL MCP

连接AI机 192.168.31.225 操作步骤如下:

4.2.1 创建运行环境

[root@AIDify ~]# yum -y install python3 python3-pip
[root@AIDify ~]# mkdir /opt/mysql-mcp
[root@AIDify ~]# cd /opt/mysql-mcp/
[root@AIDify mysql-mcp]# python3 -m venv venv
[root@AIDify mysql-mcp]# source venv/bin/activate
((venv) ) [root@AIDify mysql-mcp]# pip install mysql-mcp-server

4.2.2 写入连接配置

cat > /opt/mysql-mcp/.env <<'EOF'
MYSQL_HOST=192.168.31.222
MYSQL_PORT=3306
MYSQL_USER=mcp_rw
MYSQL_PASSWORD=YangQing@123
MYSQL_READ_QUERY_LIMIT=50
MCP_TRANSPORT=sse
MCP_SSE_HOST=0.0.0.0
MCP_SSE_PORT=8081
MCP_SSE_ALLOWED_HOSTS=192.168.31.225:*,127.0.0.1:*,localhost:*
EOF

4.2.3 启动 MySQL MCP

创建 systemd 服务文件

cat > /etc/systemd/system/mysql-mcp.service <<'EOF'
[Unit]
Description=MySQL MCP Server (SSE)
After=network.target mysql.service
Wants=network.target

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/mysql-mcp
EnvironmentFile=/opt/mysql-mcp/.env
ExecStart=/opt/mysql-mcp/venv/bin/python -m mysql_mcp_server.server
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

重载并设置开机自启

[root@AIDify mysql-mcp]# systemctl daemon-reload 
[root@AIDify mysql-mcp]# systemctl enable --now mysql-mcp.service

查看状态

[root@AIDify mysql-mcp]# systemctl status mysql-mcp.service 
● mysql-mcp.service - MySQL MCP Server (SSE)
     Loaded: loaded (/etc/systemd/system/mysql-mcp.service; enabled; preset: disabled)
     Active: active (running) since Thu 2026-10-29 23:23:41 CST; 1min 53s ago
 Invocation: 0d643f93ea5f432b973a916e3a485e86
   Main PID: 216031 (python)
      Tasks: 1 (limit: 22786)
     Memory: 39.2M (peak: 39.4M)
        CPU: 640ms
     CGroup: /system.slice/mysql-mcp.service
             └─216031 /opt/mysql-mcp/venv/bin/python -m mysql_mcp_server.server

10月 29 23:23:41 AIDify systemd[1]: Started mysql-mcp.service - MySQL MCP Server (SSE).
10月 29 23:23:41 AIDify python[216031]: <frozen runpy>:128: RuntimeWarning: 'mysql_mcp_server.server' found in sys.modules after import of package 'mysql_mcp_server', but prior to execution o>
10月 29 23:23:41 AIDify python[216031]: 2026-10-29 23:23:41,789 - mysql_mcp_server - INFO - Starting MySQL MCP server (SSE)...
10月 29 23:23:41 AIDify python[216031]: 2026-10-29 23:23:41,789 - mysql_mcp_server - INFO - SSE DNS rebinding protection enabled. Allowed hosts: 192.168.31.225:*, 127.0.0.1:*, localhost:*. Ov>
10月 29 23:23:41 AIDify python[216031]: INFO:     Started server process [216031]
10月 29 23:23:41 AIDify python[216031]: INFO:     Waiting for application startup.
10月 29 23:23:41 AIDify python[216031]: INFO:     Application startup complete.
10月 29 23:23:41 AIDify python[216031]: INFO:     Uvicorn running on http://0.0.0.0:8081 (Press CTRL+C to quit)
[root@AIDify mysql-mcp]# ss -lntp | grep 8081
LISTEN 0      2048         0.0.0.0:8081      0.0.0.0:*    users:(("python",pid=216031,fd=6))     
[root@AIDify mysql-mcp]# 

4.3 在Dify中连接MySQL MCP

Dify主页,进入工具下MCP页面,添加HTTP MCP服务:

项目 填写内容
名称 mysql-mcp-server
服务地址 http://192.168.31.225:8081/sse

保存后看到三个工具:execute_sql get_schema_info get_table_sample
image
image
image

五、创建 Y1018 数据库助手

在 Dify 中创建一个 Agent 应用。
image
image

选择已配置的大模型,添加msyql-mcp-server三个工具,提示词填写:

你是 Y1018 数据库助手,负责操作 cnblogs_y1018 数据库。
回答数据库问题时,必须调用 MySQL MCP 工具读取真实数据。
查询可以直接执行,查询结果最多显示 50 条。
添加、修改和删除前,先说明准备执行的操作,等待用户确认。
拒绝执行 DROP、TRUNCATE,以及没有 WHERE 条件的 DELETE。
工具执行后,用简短中文说明结果,不编造数据。

确认无误后,发布更新
image
image

访问Agent
image
image

六、用自然语言操作数据库

6.1 查询数据

查询全部学员
北京有哪些学员?
查询小超的学习状态

6.2 添加数据

添加学员小红,城市北京,状态学习中

Dify说明准备执行的操作后,再输入:

确认添加

6.3 修改数据

把小红的学习状态改成已完成

确认内容无误后输入:

确认修改

6.4 删除数据

删除学员小红

Dify询问时输入:

确认删除

image
image
image
image
image
image
image
image
image
image

七、总结

7.1 查看背后的执行过程

查询北京学员的执行过程:

  1. 输入自然语言:查询北京有哪些学员
  2. Agent选择execute_sql,并生产只读查询
  3. MySQL MCP执行SQL,返回符合条件的数据
  4. Agent整理结果:北京的学员有沙雪、张圆圆、甄晓、雷圆圆、许溢

一次完成操作包含的过程:

  1. 在Dify输入自然语言
  2. Agent选择MySQL MCP工具
  3. MySQL MCP在数据库机上执行SQL
  4. Dify把结果整理成中文回答

7.2 查询数据库核对结果

在数据库192.168.31.222执行:

root@mysql:~# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 45
Server version: 8.0.46-0ubuntu0.24.04.4 (Ubuntu)

Copyright (c) 2000, 2026, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT * FROM cnblogs_y1018.students;
略
|  98 | 冯丞琳    | 福州         |      1 | 2026-10-18 09:06:51 | 2026-10-18 09:06:51 |
|  99 | 杨玮琪    | 石家庄       |      1 | 2026-10-18 09:06:51 | 2026-10-18 09:06:51 |
| 100 | 魏娜      | 乌鲁木齐     |      1 | 2026-10-18 09:06:51 | 2026-10-18 09:06:51 |
+-----+-----------+--------------+--------+---------------------+---------------------+
100 rows in set (0.00 sec)

mysql> EXIT;
Bye
root@mysql:~#
posted @ 2026-10-18 20:37  墨清竹  阅读(5)  评论(0)    收藏  举报