04.Nacos的数据持久化
Posted 潮汐先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了04.Nacos的数据持久化相关的知识,希望对你有一定的参考价值。
Nacos的数据持久化
前言
我们前面是将Nacos安装在单独的一台服务器中作为独立的服务对外提供服务的。每次我们重新启动Nacos服务的时候(甚至是关机重启)发现我们以前自己写的配置文件还在,这是因为Nacos本身为我们提供了数据(配置文件)的持久化。
Nacos本身提供了一个内嵌的数据库–derby。我们写入到Nacos的配置文件其实就是被持久化到了这个数据库中,具体的位置在下图所示的位置
但是啊,官网说在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力(但也仅仅只支持mysql,mysql的版本必须是5.6.5+)
数据持久化到mysql
Nacos官网为我们提供了将数据持久化到MySQL的具体步骤:
1.准备工作
我们上面说了Nacos只支持MySQL,而且是5.6.5+的版本。这里我们采用的数据库版本号是5.7.x,具体的安装教程参考文章
2.nacos-mysql.sql
2.1 新建数据库
启动我们的MySQL5.7虚拟机,使用SQLyog连接我们的MySQL,创建数据库nacos
2.2 拷贝nacos-mysql.sql
nacos-mysql.sql
是数据库的初始化文件,他的位置在nacos的conf里面,如下图:
或者直接解压我们前面下载的nacos-server-1.4.2.tar.gz
,在conf目录下面直接找到nacos-mysql.sql
,如下图:
2.3 初始化数据库
我们在SQLyog中直接将上面的nacos-mysql.sql
导入到我们第一步新建的数据库nacos
中,如下图
3.application.properties
我们进入到nacos的conf目录,可以看到application.properties文件。由此也可以看到nacos是一个springboot项目
执行命令vim application.properties
,参照以下内容修改配置文件。修改完毕后esc->:wq!
保存退出
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://数据库ip:3306/数据库名称?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=用户名
db.password=密码
4.重启nacos
我们重新启动nacos,然后浏览器输入http://192.168.8.120:8848/nacos
发现我们之前的配置文件已经没有了;重新启动config client发现已经无法启动(没有读取到配置文件的原因)
我们之前的配置文件是默认持久化到nacos的内嵌数据库中的,现在我们重新设置了持久化的数据库mysql,但是mysql中尚没有配置文件导致无法读取到。
5.新增配置文件
我们按照文章03.Nacos组件之统一配置中心再次新增配置文件,如下图(新的配置文件会被自动持久化到mysql数据库)
5.1 新增命名空间
如下图所示,我们首先新增一个STUDY
的命名空间,随后我们的配置文件都放在该命名空间下面
命名空间ID已经发生改变了,需要将
02.springcloud_alibaba_config_client
的配置文件bootstrap.properties
中的命名空间换成上图中的新生成的ID
5.2 新增配置
然后我们点击配置列表->STUDY命名空间->新增配置
,进入到新增配置页面
configclient-dev.properties
configclient-prod.properties
6.测试
我们重新启动config client,可以发现这次是没有问题的,能够正常启动
然后我们浏览器访问http://localhost:8811/test/hello
,可以正确访问到正式配置文件中配置的属性username的值,如下图
我们打开SQLyog,查看nacos中的config_info
表数据,可以看到我们持久化到数据库中的配置文件信息,如下图
以上是关于04.Nacos的数据持久化的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud Alibaba - 04 Nacos 领域模型划分
SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段