🚀 ShardingSphere-Proxy 启动问题排查总结(Windows版) Published on Mar 23, 2026 in 随笔 with 0 comment ## 📌 一、问题背景 在 Windows 环境部署 ShardingSphere-Proxy 时,启动过程中出现多类异常,包括: * YAML 配置解析失败 * 文件占用导致无法启动 * Nacos 启动异常 * SPI 类加载异常(Hive) * XA 事务权限不足 本文总结常见问题及解决方案。 --- # 🔥 二、问题分类与解决方案 --- ## 1️⃣ Nacos 启动失败(DNS 问题) ### ❌ 报错 ```text UnknownHostException: jmenv.tbsite.net ``` ### 💡 原因 Nacos 默认访问阿里内部地址: ``` jmenv.tbsite.net ``` 本地或外网环境无法解析。 --- ### ✅ 解决方案 修改 `application.properties`: ```properties nacos.core.member.lookup.type=file ``` --- ## 2️⃣ Windows 文件占用问题 ### ❌ 报错 ```text 另一个程序正在使用此文件 ``` --- ### 💡 原因 * Proxy 上一次未正常关闭 * `logs` 目录被占用 --- ### ✅ 解决方案 ```bat taskkill /F /IM java.exe rd /s /q logs ``` --- ## 3️⃣ YAML 配置不兼容(版本问题 ⚠️) --- ### ❌ 报错1 ```text Unable to find property 'sqlCommentParseEnabled' ``` ### ❌ 报错2 ```text Unable to find property 'logging' ``` --- ### 💡 原因 > ShardingSphere-Proxy 版本 与 YAML 配置版本不一致 --- ### ✅ 解决方案 删除不兼容字段: ```yaml sqlParser: sqlCommentParseEnabled: false logging: ... ``` --- ### ✅ 推荐最小配置(server.yaml) ```yaml mode: type: Standalone authority: users: - user: root password: root privilege: type: ALL_PERMITTED props: sql-show: true ``` --- ## 4️⃣ Hive SPI 类加载异常 --- ### ❌ 报错 ```text HiveConnectionPropertiesParser ClassNotFoundException: ZooKeeperHiveClientException ``` --- ### 💡 原因 `ext-lib` 目录中存在不兼容或多余 Jar 包 --- ### ✅ 解决方案 确保 `ext-lib` 目录只包含: ``` mysql-connector-j-8.x.x.jar ``` 删除以下内容: * hive 相关依赖 * shardingsphere 相关 jar * 其他无关依赖 --- ## 5️⃣ XA 事务权限问题(关键 ⚠️) --- ### ❌ 报错 ```text Failed to create XA transaction manager requires `XA_RECOVER_ADMIN` ``` --- ### 💡 原因 MySQL 用户缺少: ```sql XA RECOVER ``` 所需权限。 --- ### ⚠️ 核心点 ```sql SELECT CURRENT_USER(), USER(); ``` 示例: ``` CURRENT_USER() = root@% USER() = root@localhost ``` 👉 实际权限用户是: ``` root@% ``` --- ### ❌ 错误授权方式 ```sql GRANT XA_RECOVER_ADMIN ON *.* TO 'root'@'localhost'; ``` --- ### ✅ 正确授权方式 ```sql GRANT XA_RECOVER_ADMIN ON *.* TO 'root'@'%'; FLUSH PRIVILEGES; ``` --- ## 6️⃣ MySQL 8 权限机制变化 --- ### ❌ 报错 ```text 1410 - You are not allowed to create a user with GRANT ``` --- ### 💡 原因 MySQL 8 不允许通过 GRANT 创建用户 --- ### ✅ 正确方式 ```sql CREATE USER 'user'@'host' IDENTIFIED BY 'password'; GRANT ...; ``` 或使用已有用户。 --- # 🎯 三、核心经验总结 --- ## ✅ 1)配置必须与版本匹配 * 不要直接复制旧教程 YAML * 配置需对应当前 Proxy 版本 --- ## ✅ 2)ext-lib 只放数据库驱动 ❌ 禁止放: * shardingsphere 相关 jar * hive jar * 其他第三方依赖 --- ## ✅ 3)权限判断看 CURRENT_USER() ```sql SELECT CURRENT_USER(); ``` 不是 `USER()` --- ## ✅ 4)XA 默认会触发权限校验 * 不使用分布式事务时建议关闭 XA * 或补齐权限 --- ## ✅ 5)Proxy 是数据库网关 ``` Spring Cloud → ShardingSphere-Proxy → MySQL ``` --- # 🚀 四、建议实践 --- ## 🔧 1)固定版本 * ShardingSphere-Proxy * YAML 模板 --- ## 📦 2)初始化脚本 建议准备: * 建库 SQL * 分表 SQL * 权限 SQL --- ## ⚙️ 3)一键启动脚本 包括: * 清理日志 * 杀进程 * 启动 Proxy --- # 🎯 五、总结 --- > 本次问题的本质: ``` 配置版本不一致 + Jar污染 + MySQL权限不足 + Windows环境问题 ``` --- > 最终解决路径: ``` 清环境 → 修配置 → 精简依赖 → 补权限 ``` --- ✔ 当前环境已可正常运行 ShardingSphere-Proxy 启动成功后。默认端口3307 .可以直接使用工具链接 本文由 admin 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。