如何用 ShardingSphere-MCP 完成读写分离规则的规划、审查与执行工作流
【免费下载链接】shardingsphereEmpowering Data Intelligence with Distributed SQL for Sharding, Scalability, and Security Across All Databases.项目地址: https://gitcode.com/GitHub_Trending/sh/shardingsphere
本文的任务是:在 AI 应用中通过自然语言,借助 ShardingSphere-MCP 的读写分离功能插件,为一个 ShardingSphere-Proxy 逻辑库完成读写分离规则的规划、审查、执行与校验,全程只生成可读写的 DistSQL 变更。适用前提:runtimeDatabases配置指向的必须是 ShardingSphere-Proxy 逻辑库,写存储单元和读存储单元必须已经存在于 Proxy 中——该插件只生成读写分离 DistSQL,不会创建或修复存储单元,也不生成物理 DDL、索引 DDL、迁移、回填或物理元数据探测(见 读写分离功能说明)。
准备条件
规划规则前,用户需要能明确提供:逻辑库名、规则名、写存储单元、读存储单元,以及负载均衡算法意图。以下示例统一使用文档中的取值:逻辑库logic_db、规则名rw_ds、写存储单元write_ds、读存储单元read_ds_0, read_ds_1。
MCP Server 侧按 快速开始 准备环境:
JAVA_HOME或PATH中可用的 JDK 21;- 一个可通过 JDBC 访问的 ShardingSphere-Proxy 逻辑库;
- 一个支持 MCP 的 AI 应用、IDE 插件或 Agent 平台。
在仓库根目录构建发行包:
./mvnw -pl distribution/mcp -am -DskipTests package进入发行包目录(${version}需替换为实际构建出的版本,例如5.5.4-SNAPSHOT):
cd distribution/mcp/target/apache-shardingsphere-mcp-${version}预期结果:当前目录包含bin/、conf/、lib/。
编辑conf/mcp-http.yaml,把runtimeDatabases指向已有 Proxy 逻辑库:
runtimeDatabases: "logic_db": jdbcUrl: "jdbc:mysql://127.0.0.1:3307/logic_db" username: "root" password: "" driverClassName: "com.mysql.cj.jdbc.Driver"logic_db、127.0.0.1、3307、root和空密码都是文档示例值,需按实际连接信息替换;MCP Server 会从jdbcUrl解析数据库类型。如果目标数据库驱动没有随发行包提供,启动前把对应 JDBC 驱动 jar 放入plugins/。
启动 HTTP MCP Server(Unix-like 系统):
bin/start.sh > logs/mcp-http.log 2>&1 &Windows 下使用:
start "ShardingSphere MCP" cmd /c "bin\start.bat > logs\mcp-http.log 2>&1"默认端点是http://127.0.0.1:18088/mcp,在 AI 应用中按 客户端集成 的方式配置该地址。启动后用“查看logic_db中有哪些表”这类最小任务确认 MCP Server 已能访问目标逻辑库;也可以读取shardingsphere://runtime资源或调用database_gateway_validate_runtime_database验证运行时数据库就绪(见 部署说明)。
规划规则:用自然语言生成可审查的计划
在 AI 应用中直接描述需求,例如文档给出的示例:
- 查看
logic_db的读写分离规则和负载均衡算法插件。 - 规划名为
rw_ds的读写分离规则,写存储单元是write_ds,读存储单元是read_ds_0, read_ds_1。
规划工具返回的响应面向模型包含以下字段,也是审查计划时的事实来源(见 规则变更流程):
plan_id:把已生成计划连接到 workflow resource、预览、执行和校验工具;summary:模型可读状态摘要,说明计划需要补充信息、可以预览或已经失败;algorithm_recommendations:根据 Proxy 可见插件目录或用户显式输入选择的候选算法;property_requirements:所选算法的必填或可选属性,缺少必填属性时 workflow 会保持在澄清状态而不是生成不安全产物;resources_to_read和next_actions:继续 workflow 所需的资源与工具导航提示;distsql_artifacts:当前功能插件边界内生成的可审查规则 DistSQL。
执行 workflow 前,确认返回的plan_id、resources_to_read、next_actions和distsql_artifacts;执行前应先通过 workflow resource 审查已持久化的计划。Client 应优先遵循这些字段,而不是自行猜测替代调用,或向用户询问 payload 中已经包含的信息。
审查计划:确认语句类型、存储单元与算法属性
按 读写分离功能说明 的审查重点逐项核对:
- 确认规则计划使用的是
CREATE、ALTER或DROP READWRITE_SPLITTING RULE语句。 - 确认状态计划使用
ALTER READWRITE_SPLITTING RULE ... ENABLE或DISABLE。 - 确认存储单元名是已有逻辑存储单元——workflow 不会创建它们。
- 选择负载均衡算法前,审查
algorithm_recommendations。 - 核对算法属性要求:
RANDOM和ROUND_ROBIN不需要负载均衡属性;WEIGHT需要为每个读存储单元提供一个权重属性。
规则变更的通用审查流程(需求确认、预览、执行、校验)同样适用于本场景,完整说明见 规则变更流程。
预览变更:先不修改运行时状态
审查通过后,要求先预览而不执行,例如“先预览,不要执行。”。预览只返回变更内容和影响范围,不修改运行时状态,适合在确认待执行语句、变更产物和副作用后再决定是否执行。
如果计划中使用了敏感值占位符(例如{"secret_ref": "placeholder://secret-value-1"}),预览响应只会显示中性占位符或******。注意:若工作流仍包含敏感值占位符,自动执行会在产生副作用前停止,并返回secret_reference_manual_execution_required——此时应改用人工执行包,由执行人员在 MCP 和 AI 应用之外的受控环境中替换真实值后再执行。
执行变更:自动执行或导出人工执行包
| 用户说法 | 用户会得到什么 | 适用场景 |
|---|---|---|
| “先预览,不要执行。” | 只返回变更内容和影响范围 | 先确认待执行语句、变更产物和副作用 |
| “确认执行刚才的计划。” | 执行已经预览并确认的变更 | 用户已完成审查 |
| “导出人工执行包。” | 返回可由运维人员审查和执行的语句 | 需要审批、变更窗口或受控环境执行 |
三种说法对应同一份已规划的plan_id,选择哪一条取决于变更是否需要人工审批;有副作用的变更必须经过确认后才执行。
校验结果与状态变更
执行后按功能插件返回的规则状态或 workflow 执行结果校验,例如文档示例中的状态变更任务:
- 禁用规则
rw_ds中的读存储单元read_ds_1,然后校验状态。
这类任务走的是状态计划(ALTER READWRITE_SPLITTING RULE ... DISABLE),审查与执行方式与规则计划一致。summary与next_actions字段会说明当前可以继续的操作。
能力边界与限制
- 仅支持 ShardingSphere-Proxy 逻辑库,数据库直连模式不适用读写分离功能插件。
- 插件不创建或修复存储单元,不探测物理数据源元数据。
- 对象名内容不能包含反引号、NUL、回车或换行。
- 用户看到的是 Proxy 暴露的逻辑元数据,不等同于每个底层物理库的完整元数据。
排障入口
如果 AI 应用无法连接或看不到逻辑库,或规划、执行失败,查看 常见问题;需要直接调试 MCP 协议请求时,见 自研集成附录。运行时状态与基础诊断信息可通过shardingsphere://runtime资源查看,日志位于logs/mcp.log。
【免费下载链接】shardingsphereEmpowering Data Intelligence with Distributed SQL for Sharding, Scalability, and Security Across All Databases.项目地址: https://gitcode.com/GitHub_Trending/sh/shardingsphere
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考