# Nacos 集群 MySQL 替代信创适配解决方案3.2.4版本

# 1. 文档概述

# 1.1 文档目的

本文档提供 Nacos 集群在信创环境下的数据库替代方案,使用达梦 DM8 或人大金仓 KingbaseES 替代 MySQL,指导现场完成部署、验证、升级和日常运维。

安装包:

https://frontend-project-dev.oss-cn-beijing.aliyuncs.com/software/nacos-server-3.2.4-xy-xinchuang-260910.tar.gz

更新日期:2026-09-09 更新内容:修复 3.0.0 <= Nacos <=3.2.3 版本权限绕过漏洞

# 1.2 适用范围

本方案适用于使用 Nacos 集群且需要适配达梦 DM8 或人大金仓 KingbaseES 的项目。


# 2. 问题背景

# 2.1 现状分析

现有项目通常采用 Nacos 集群和 MySQL 数据库。信创项目需要将 MySQL 替换为国产数据库,同时保证服务注册发现、配置管理和集群能力正常。

# 2.2 核心痛点

  • 兼容性:国产数据库的 DDL、分页、聚合函数和字段类型与 MySQL 存在差异。
  • 部署风险:数据库初始化、数据迁移和配置调整可能造成启动失败或数据异常。
  • 运维风险:数据源插件、JDBC 驱动和数据库版本必须匹配。

# 2.3 目标要求

  • 支持达梦 DM8 和人大金仓 KingbaseES。
  • 保持 Nacos 服务发现、配置管理及集群功能完整。
  • 部署过程可验证、可回滚。

# 3. 解决方案

# 3.1 方案概述

本方案基于 Nacos 3.2.4 增加达梦和人大金仓数据源适配:

  • 达梦 DM8:数据源类型为 dm,使用 DM 原生 DDL 和运行期 SQL。
  • KingbaseES:数据源类型为 kingbase-mysql

现场只能选择一种数据库,集群所有节点必须使用相同数据库类型。

# 3.2 技术架构

安装包已集成:

nacos/plugins/nacos-datasource-plugin-kingbase-mysql-3.2.4.jar
nacos/plugins/nacos-datasource-plugin-dm-3.2.4.jar
nacos/plugins/kingbase8-9.0.0.jar
nacos/plugins/DmJdbcDriver8.jar
nacos/conf/kingbase-schema.sql
nacos/conf/dm-schema.sql

**驱动说明:**安装包已内置金仓和达梦 JDBC 驱动,正常情况下无需另行安装。如果现场数据库版本、补丁或 JDK 与内置驱动不匹配,可使用数据库厂商提供的匹配驱动进行替换。替换后,同一种数据库只能保留一个 JDBC 驱动版本,集群所有节点必须保持一致。


# 4. 部署实施指南

# 4.1 前置准备

数据备份,必须执行

  • 备份 Nacos 配置中心全部配置。
  • 备份 cluster.confapplication.properties
  • 对原数据库进行全量备份。
  • 备份原 Nacos 安装目录,确保可以回滚。

环境准备

  • JDK 17。
  • 已部署达梦 DM8 或 KingbaseES。
  • Nacos 节点可以访问数据库。
  • 集群节点间网络和端口互通。

# 4.2 部署步骤

# 4.2.1 解压安装包

tar -xzf nacos-server-3.2.4-xy-xinchuang-260910.tar.gz
cd nacos

必须解压到全新目录,不要覆盖旧 Nacos 目录,避免残留旧插件或旧驱动。

目录关键内容:

├── bin
├── conf
│   ├── application.properties  # 主配置文件
│   ├── cluster.conf.example    # 集群配置文件示例
│   ├── console-guide.conf      # 3.x 版本新增控制台相关配置
│   ├── derby-schema.sql        # 嵌入式derby数据库初始化sql
│   ├── dm-schema.sql           # 达梦数据库初始化sql
│   ├── kingbase-schema.sql     # 金仓mysql模式初始化sql
│   ├── mysql-schema.sql        # mysql初始化sql
│   ├── oracle-schema.sql       # oracle初始化sql
│   └── pg-schema.sql           # Postgresql初始化sql
├── plugins
│   ├── derby-10.14.2.0.jar
│   ├── kingbase8-9.0.0.jar
│   ├── DmJdbcDriver8.jar
│   ├── mysql-connector-j-8.2.0.jar
│   ├── nacos-datasource-plugin-derby-3.2.4.jar
│   ├── nacos-datasource-plugin-dm-3.2.4.jar
│   ├── nacos-datasource-plugin-kingbase-mysql-3.2.4.jar
│   ├── nacos-datasource-plugin-mysql-3.2.4.jar
│   ├── nacos-datasource-plugin-oracle-3.2.4.jar
│   ├── nacos-datasource-plugin-postgresql-3.2.4.jar
│   ├── nacos-default-ai-importer-plugin-3.2.4.jar
│   ├── nacos-default-ai-pipeline-plugin-3.2.4.jar
│   ├── nacos-default-ai-trace-plugin-3.2.4.jar
│   ├── nacos-ldap-auth-plugin-3.2.4.jar
│   ├── nacos-oidc-auth-plugin-3.2.4.jar
│   └── postgresql-42.7.11.jar
└── target
    └── nacos-server.jar   # 主服务

# 4.2.2 数据库初始化

达梦 DM8

建议创建独立 NACOS 用户或 Schema。

使用达梦管理工具或 disql 执行:

conf/dm-schema.sql

人大金仓 KingbaseES

建议准备独立数据库、Schema 和用户,例如:

数据库:nacos
Schema:NACOS
用户:nacos

使用 KingbaseES 管理工具执行:

conf/kingbase-schema.sql

初始化脚本执行报错时应停止部署,确认数据库版本、兼容模式和 Schema 后再处理。

# 4.2.3 配置文件修改

根据现场数据库类型,修改 conf/application.properties。金仓和达梦配置只能启用一套。

人大金仓配置示例

spring.sql.init.platform=kingbase-mysql    # 旧版本无法区分数据库模式,新版本为了便于区分数据库模式,特此命名

db.num=1
db.url.0=jdbc:kingbase8://127.0.0.1:54321/nacos?schema=NACOS&compatibleMode=mysql&ignoreCase=true&ENCODING=utf-8
db.user=nacos
db.password=请替换为真实密码

db.pool.config.driverClassName=com.kingbase8.Driver
db.pool.config.connectionTestQuery=SELECT 1

schemacurrentSchemacompatibleMode 参数以现场 KingbaseES 版本及 JDBC 驱动说明为准。

达梦配置示例

spring.sql.init.platform=dm

db.num=1
db.url.0=jdbc:dm://127.0.0.1:5236?schema=NACOS
db.user=NACOS
db.password=请替换为真实密码

db.pool.config.driverClassName=dm.jdbc.driver.DmDriver
db.pool.config.connectionTestQuery=SELECT 1

DMSERVER 是达梦服务名,不是固定必填项。多数环境可以忽略;现场明确要求服务名时使用:

db.url.0=jdbc:dm://127.0.0.1:5236/DMSERVER?schema=NACOS

集群配置

编辑 conf/cluster.conf

192.168.1.101:8848
192.168.1.102:8848
192.168.1.103:8848

# 4.2.4 集群启动与验证

启动集群

sh bin/startup.sh

建议先启动一个节点并完成验证,再启动其他节点。

检查日志

tail -f logs/start.out

同时检查:

logs/nacos.log
logs/config-fatal.log
logs/naming-server.log

访问地址

Nacos 3.x 默认端口:

地址或端口 用途
http://节点IP:8080/ Console 管理页面
8848 Open/Admin HTTP API
9848 客户端 gRPC
9849 服务端节点间 gRPC
7848 JRaft

数据迁移

  • 配置数据可通过 Nacos 控制台从原集群导出,再导入新集群。
  • 服务注册信息无需迁移,由各微服务重新注册。

功能验证

  1. 创建并查询命名空间。
  2. 发布、查询、修改和删除配置。
  3. 查看和回滚配置历史版本。
  4. 重启 Nacos 后重新查询配置。
  5. 验证客户端注册和服务发现。
  6. 验证集群节点状态和数据一致性。

# 4.3 JDBC 驱动替换

只有现场版本与包内驱动不匹配时才需要替换。

替换步骤

  1. 停止全部 Nacos 节点。
  2. 将包内原驱动移出 plugins/ 并备份。
  3. 将现场匹配驱动放入 plugins/
  4. 同一种数据库只保留一个 JDBC 驱动。
  5. 所有集群节点使用相同驱动版本。
  6. 完整重启 Nacos。

驱动文件名发生变化时,driverClassName 配置不变。

# 4.4 回滚方案

  1. 停止全部新 Nacos 节点。
  2. 保留故障日志。
  3. 恢复原 Nacos 程序和配置。
  4. 按备份策略恢复原数据库。
  5. 启动原 Nacos 集群并验证业务。

# 5. 运维管理指南

# 5.1 版本升级

升级前确认目标 Nacos、数据源插件、JDBC 驱动和数据库版本兼容,并完成数据库和配置备份。

建议在测试环境验证后逐个节点滚动升级。所有节点最终必须保持相同 Nacos、插件和驱动版本。

# 5.2 集群调整

集群扩缩容与原生 Nacos 一致。新增节点必须同步:

  • application.properties
  • cluster.conf
  • 数据源插件
  • JDBC 驱动

# 5.3 日常运维

重点检查:

  • Nacos 节点 CPU、内存、磁盘和日志。
  • 数据库连接数、慢 SQL、锁等待和备份状态。
  • 集群各节点配置、插件和驱动版本是否一致。
  • 配置发布、命名空间查询及客户端注册是否正常。

常见错误:

ClassNotFoundException: com.kingbase8.Driver
ClassNotFoundException: dm.jdbc.driver.DmDriver
Unknown database type
BadSqlGrammarException

出现驱动类错误时,确认驱动位于 plugins/、同一数据库只保留一个版本,并完整重启 Nacos。


# 6. 附录

# 6.1 常见问题 FAQ

Q1:安装包是否已包含数据库驱动?
A:已包含 kingbase8-9.0.0.jarDmJdbcDriver8.jar,正常情况下无需另装。

Q2:现场数据库版本与内置驱动不匹配怎么办?
A:使用厂商提供的匹配驱动替换包内驱动。同一种数据库只保留一个版本,集群所有节点保持一致。

Q3:是否支持从 MySQL 迁移配置数据?
A:支持。通过 Nacos 控制台导出原配置并导入新集群;服务注册信息由微服务重新注册。

Q4:是否支持部分节点使用 MySQL、部分节点使用国产数据库?
A:不支持。集群所有节点必须使用相同数据库类型。

Q5:达梦连接地址必须填写 DMSERVER 吗?
A:不是。DMSERVER 是服务名,多数环境可以忽略,现场明确要求时再填写。

编撰人:liujun、chongfk、zhenxy