Nacos MySQL 存储
Nacos 默认用内嵌 Derby 存数据,适合单机试用;生产或集群环境建议换 MySQL。本章讲为什么换、怎么换、怎么验证。
为什么需要 MySQL
- 默认内嵌 Derby 的数据只存在本机目录,重启不丢但难以备份、迁移、多人共享
- 集群模式下每个节点各存一份 Derby 会导致数据不一致,必须用共享存储
- 配置内容、持久实例这类需要可靠保存的数据,放进 MySQL 更可控
单机学习阶段用 Derby 完全够用,本章的切换主要是为第 12 章集群部署做准备。
准备数据库与表结构
先建库,再执行 Nacos 自带的建表脚本:
CREATE DATABASE nacos_config DEFAULT CHARACTER SET utf8mb4;
脚本位于解压目录 conf/mysql-schema.sql(旧版本叫 nacos-mysql.sql),执行即可建出全部表,核心表包括:
| 表名 | 用途 |
|---|---|
| config_info | 当前配置内容 |
| his_config_info | 配置历史版本(回滚数据源) |
| config_info_beta | 灰度发布的 beta 配置 |
| users / roles | 鉴权用户与角色 |
命令行执行脚本:
mysql -u nacos -p nacos_config < /opt/nacos/conf/mysql-schema.sql
# 输出无报错即成功;可查表确认
mysql -u nacos -p nacos_config -e "SHOW TABLES;"
修改 application.properties
编辑 conf/application.properties,把存储从 Derby 切到 MySQL,核心是 spring.datasource 三件套与数据源参数:
# 开启 MySQL 数据源
spring.datasource.platform=mysql
# 数据源个数与连接信息(下标从 0 开始)
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=nacos
db.password.0=换成你的数据库密码
注意:Nacos 的 MySQL 参数是 db.url.0 / db.user.0 / db.password.0 这套命名,不是 Spring 常规的 spring.datasource.url,别照搬别的框架写法。
重启并验证
改完配置重启 Nacos,再验证数据确实写进了 MySQL:
sh /opt/nacos/bin/shutdown.sh
sh /opt/nacos/bin/startup.sh -m standalone
# 启动后到控制台随便建一份配置
mysql -u nacos -p nacos_config -e "SELECT data_id FROM config_info;"
# 输出:order-service.properties (控制台建过的配置已落库)
控制台顶部出现存储切换提示、config_info 表出现刚建的配置,都说明 MySQL 已生效。
多数据源与集群提示
db.num=2 并补上 db.url.1/db.user.1/db.password.1 可配置两个数据源(如主备);集群部署时所有节点连同一个 MySQL,配置与持久实例数据即全局共享——这是第 12 章集群方案的基础。
小结
接 MySQL 就三步:建库并执行 conf/mysql-schema.sql 建表 → 在 application.properties 里配好 db.num/db.url.0/db.user.0/db.password.0 → 重启后到控制台建条配置,去 config_info 表里确认落库。跑通这一步,集群部署就只剩节点与负载均衡的活了。