Nacos 持久化配置:从嵌入式数据库到 MySQL 集群方案
Nacos 默认使用嵌入式数据库 Derby 存储配置和服务元数据,但其仅适用于单机模式。在生产环境的集群部署中,为保证数据一致性和高可用性,需将数据持久化到外置数据库(目前官方仅支持 MySQL)。本文详细介绍 Nacos 持久化的配置步骤及注意事项。
为什么需要持久化?
- Derby 的局限性:嵌入式数据库仅存在于当前 Nacos 节点的内存和本地文件中,集群环境下各节点数据无法同步,导致配置和服务信息不一致;
- 数据可靠性:MySQL 支持数据持久化和主从备份,避免 Nacos 节点故障导致数据丢失;
- 集群一致性:Nacos 集群所有节点连接同一 MySQL 数据库,确保配置和服务信息全局一致。
Nacos 持久化到 MySQL 的步骤
1. 环境准备
- MySQL 版本:推荐 5.7 及以上(需支持 InnoDB 引擎);
- Nacos 版本:2.0.x 及以上(确保兼容 MySQL 驱动);
- 权限:拥有 MySQL 数据库的创建、表操作权限。
2. 初始化数据库脚本
Nacos 提供了内置的数据库初始化脚本,步骤如下:
找到脚本文件:
在 Nacos 安装目录的conf
文件夹中,找到nacos-mysql.sql
脚本(若不存在,可从Nacos 源码的distribution/conf
目录下载)。执行脚本:
登录 MySQL 客户端,创建名为nacos的数据库(名称可自定义):
1
CREATE DATABASE IF NOT EXISTS nacos CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
切换到nacos数据库,执行nacos-mysql.sql脚本:
1
2USE nacos;
SOURCE /path/to/nacos/conf/nacos-mysql.sql; -- 替换为实际脚本路径
验证表结构:
脚本执行成功后,会创建 12 张表(如config_info
存储配置、service_info
存储服务信息等),可通过show tables;
查看。
3. 配置 Nacos 连接 MySQL
修改 Nacos 的配置文件,指定 MySQL 连接信息:
打开配置文件:
进入 Nacos 安装目录的conf
文件夹,编辑application.properties
。添加 MySQL 配置:
在文件末尾添加以下配置(注释默认的 Derby 配置,若有):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15### 启用MySQL作为数据源
mysql =
### 数据库实例数量(单实例填1,主从架构可填多个)
1 =
### 第1个数据库连接信息
jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai =
root # MySQL用户名 =
123456 # MySQL密码 =
### 若有多个数据库(主从),继续添加db.url.1、db.user.1等
# db.url.1=jdbc:mysql://slave-mysql:3306/nacos?...
# db.user.1=root
# db.password.1=123456- 参数说明:
serverTimezone=Asia/Shanghai
:指定时区,避免时间同步问题;useSSL=false
:禁用 SSL(测试环境可关闭,生产环境建议开启);autoReconnect=true
:网络中断后自动重连。
- 参数说明:
4. 验证持久化效果
启动 Nacos:
以单机模式启动 Nacos(集群模式需配置集群节点):1
2
3sh startup.sh -m standalone # Linux/Mac
# 或 Windows
startup.cmd -m standalone创建测试配置:
登录 Nacos 控制台,新建一个配置(如test-dev.yaml
),发布后查看 MySQL 的config_info
表:1
SELECT * FROM config_info WHERE data_id = 'test-dev.yaml';
若能查询到记录,说明配置已成功持久化到 MySQL。
测试数据同步:
重启 Nacos 节点,查看控制台是否能加载刚才创建的配置(若能加载,证明持久化生效)。
集群环境下的持久化注意事项
所有节点连接同一 MySQL:
Nacos 集群的每个节点必须在application.properties
中配置相同的 MySQL 连接信息,确保数据来源一致。MySQL 高可用:
生产环境建议部署 MySQL 主从架构或使用云数据库(如 RDS),避免 MySQL 单点故障导致 Nacos 不可用。数据库权限控制:
- 为 Nacos 创建专用 MySQL 用户,仅授予
nacos
数据库的SELECT
、INSERT
、UPDATE
、DELETE
权限; - 禁止使用
root
用户直接连接,降低安全风险。
- 为 Nacos 创建专用 MySQL 用户,仅授予
表结构升级:
升级 Nacos 版本时,需检查是否有新的数据库脚本(如nacos-mysql.sql
更新),并执行升级脚本以兼容新功能。连接池配置:
可在application.properties
中自定义数据库连接池参数(如最大连接数、超时时间):1
2
3### 连接池配置
20 =
30000 =
常见问题与解决方案
- Nacos 启动报错 “无法连接 MySQL”?
- 检查
db.url.0
中的 IP、端口、数据库名是否正确; - 确认 MySQL 服务是否启动,防火墙是否开放 3306 端口;
- 验证
db.user.0
和db.password.0
是否正确,可通过mysql -u用户名 -p密码
测试连接。
- 检查
- 配置发布后 MySQL 中无记录?
- 检查
spring.datasource.platform=mysql
是否配置(若漏配,默认使用 Derby); - 查看 Nacos 日志(
logs/nacos.log
),是否有 “表不存在” 错误(可能是脚本未执行或执行失败)。
- 检查
- 集群节点数据不一致?
- 确保所有节点的
application.properties
中 MySQL 配置完全一致; - 检查 MySQL 是否启用了 binlog,主从同步是否正常(主从架构时)。
- 确保所有节点的
- MySQL 性能瓶颈?
- 监控
config_info
、service_info
表的读写频率,必要时添加索引; - 调整连接池参数(如
maximum-pool-size
),避免连接数不足。
- 监控
总结
Nacos 持久化到 MySQL 是集群部署的必选配置,通过将配置和服务信息存储到外置数据库,确保了集群数据的一致性和可靠性
v1.3.10