分布式微服务--Nacos持久化
一、🔍 什么是 Nacos 持久化?
Nacos 持久化,是指将 Nacos 的配置中心数据(如 DataID、Group、Namespace)、服务注册信息和权限管理等,保存到外部数据库(如 MySQL)中,实现配置的持久存储、版本控制、历史记录和集群同步。
二、📦 Nacos 内置存储(默认)
✅ 默认行为:
如果你没有配置数据库(MySQL),Nacos 默认使用内置的轻量数据库 Derby(纯 Java 实现)。
🗂 存储位置:
nacos/data/derby-data/ nacos/data/config-data/
✅ 适用场景:
场景 是否推荐使用内置数据库 本地开发测试 ✅ 推荐(开箱即用) 单人学习演示 ✅ 推荐 线上生产 ❌ 禁用 多人协作 ❌ 禁用 Nacos 集群 ❌ 禁用
三、🔧 Nacos 持久化:为什么要使用 MySQL?
原因 说明 ❌ 内置 Derby 不支持集群 集群间无法同步数据 ❌ 数据重启易丢失 Derby 是轻量级嵌入式 ✅ 配置需长期保存 外部数据库可持久保存 ✅ 需要权限控制、版本管理 权限和历史数据依赖数据库表 ✅ 高可用部署(集群)必需 所有节点共享同一数据库
四、🧠 Nacos 持久化会存储哪些数据?
以下是通过
nacos-mysql.sql
初始化的主要表:
表名 用途 config_info 配置中心核心配置(DataID、Group等) config_info_beta Beta 环境配置(灰度) config_info_tag 标签配置 his_config_info 配置历史版本 tenant_info 命名空间(Namespace)信息 users / roles / permissions 控制台用户、角色和权限 group_capacity Group 容量管理 tenant_capacity 租户容量管理
五、🚀 持久化配置步骤详解(使用 MySQL)
✅ 1. 创建数据库:
CREATE DATABASE nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
✅ 2. 导入官方 SQL 脚本:
在
conf/nacos-mysql.sql
中找到并执行:文件名称也可能为:mysql-schema.sql(是早期版本(Nacos 1.x)中常用的数据库初始化脚本名称)
mysql -u root -p nacos_config < nacos/conf/nacos-mysql.sql
✅ 3. 修改配置文件:
编辑
nacos/conf/application.properties
:# 指定使用 MySQL 数据源 spring.datasource.platform=mysql# 多数据源配置,仅配置一个即可 db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&useSSL=false db.user=root db.password=123456
✅ 所有集群节点需配置相同数据库信息!
✅ 4. 启动 Nacos:
单机启动:
sh startup.sh -m standalone
集群启动:
sh startup.sh -m cluster
六、🧩 集群部署是否必须持久化?
✅ 必须持久化到 MySQL,否则:
各节点数据无法同步;
服务注册信息、配置不一致,导致脑裂;
高可用场景无法实现。
七、📝 如何判断当前是否使用内置数据库?
方法一:查看日志
Database product name is: Apache Derby
方法二:看文件夹是否有
nacos/data/derby-data/
方法三:配置文件未设置数据库信息
未设置
spring.datasource.platform
,或设置为derby
,即为内置。
八、⚙️ 持久化 VS 内置数据库对比总结
对比项 内置 Derby MySQL 持久化(推荐) 是否默认开启 ✅ 是 ❌ 需配置 是否持久化存储 ❌ 有丢失风险 ✅ 持久保存 是否支持集群 ❌ 不支持 ✅ 支持 是否支持版本管理 ❌ 不支持 ✅ 支持 是否支持权限控制 ❌ 不支持 ✅ 支持 是否适合生产环境 ❌ 禁用 ✅ 推荐 部署复杂度 ✅ 简单 ❌ 需配置数据库
九、📌 推荐使用场景一览
场景 推荐方式 本地快速调试 / 学习 ✅ 内置 Derby 多人协作 / 共享配置中心 ✅ 持久化 MySQL 服务注册高可用集群 ✅ 持久化 MySQL 正式生产环境 ✅ 持久化 MySQL
🔚 总结一句话:
Nacos 内置 Derby 数据库适用于开发环境;一旦部署到测试/生产或做集群部署,必须接入 MySQL 进行持久化配置。