Nacos数据持久化到mysql

在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力。按照Nacos官方文档中步骤将Nacos的数据持久化方式改为mysql存储,过程中会踩几个坑,这里记录一下。

一、Nacos2.0.1的数据持久化到mysql

安装数据库,版本要求:5.6.5+。本文使用的mysql版本为8.0.18,Windows本地安装(安装过程网上很多,这里就不说了):
1
初始化mysql数据库,数据库初始化文件:nacos-mysql.sql,该文件在nacos主目录的conf目录下。新建一个名为nacos_test的数据库,再运行nacos-mysql.sql
2
执行完成后得到如下表结构:
3
如果Nacos服务器中有配置并且也需要持久化到mysql,需要先将配置导出,不同的命名空间下的配置要分别导出:
4
修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_test?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

Nacos较新的版本都支持8.0以上的mysql,比如Nacos1.4.0,2.0.1,所以在使用mysql8.0及其以上版本时,不会出现mysql驱动不匹配的问题,但还是需要在url上加上serverTimezone时区。如果url上不加时区serverTimezone时区,Nacos服务器在启动时会报如下错误(只截取了部分日志):
5
conf/application.properties文件中添加了mysql相关配置后,如果Nacos服务器正在运行,需关闭后再以单机模式启动Nacos,之后Nacos的数据都会写到mysql。查看Nacos管理页面,里面没有数据:
6

查看mysql的nacos_test数据库中config_info表,暂时还没有数据:
7
如果之前的Nacos创建有命名空间,那么需要重新手动创建:
8
然后在导入之前导出的数据,不同的命名空间下的配置要分别导入:
9
导入完成之后查看配置列表:
10
然后查看mysql中nacos_test数据库中的config_info表,可见Nacos服务器中的数据已经成功持久化到mysql中:
11

二、Nacos1.2.0的数据持久化到mysql

Nacos较新的版本都支持8.0以上的mysql,比如Nacos1.4.0,2.0.1,所以在使用mysql8.0及其以上版本时,不会出现mysql驱动不匹配的问题。而如果使用的是老版本的Nacos,可以去查看一下它使用的mysql版本是不是8.0以上的。在nacos主目录的target目录下,查看nacos-server.jar中的BOOT-INF\lib,可以看到nacos使用的mysql版本,如果使用的是8.0以上版本,我们的mysql选用8.0及以上版本时,就不会出现因mysql驱动不匹配导致的问题。下图为查看Nacos2.0.1使用的mysql:
12
也可以在nacos源码中查看使用的mysql版本,下面在nacos2.0.1源码中主项目的根目录下的pom.xml文件中查看使用的mysql版本:
13
发现高于8.0,说明nacos2.0.1与mysql8.0以上的兼容性问题已经得到了解决,所有推荐使用新版本的Nacos。下面查看Nacos1.2.0使用的mysql,为5.1.34,使用mysql8.0以上版本会出现兼容性问题:
14
下面测试了一下Nacos1.2.0版本的数据持久化到mysql8,先初始化mysql数据库:
15
修改conf/application.properties文件,新增以下配置:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_1.2.0?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

然后启动Nacos服务器,发现启动成功,能成功查看Nacos管理页面,里面没有数据:
16
但在新建配置时会出错:
17
在网上查阅了相关资料,Nacos1.2.0可以通过在Nacos安装目录下新建plugins\mysql目录,然后将把对应的驱动jar包放在该目录中就能解决问题:
18
mysql-connector-java的jar包下载地址:https://repo1.maven.org/maven2/mysql/mysql-connector-java/

然后再次启动,新建一个配置文件:
19
查看配置列表,发现创建成功:
20
然后查看mysql中nacos_1.2.0数据库中的config_info表,可见Nacos服务器中的数据已经成功持久化到mysql中:
21

三、Nacos1.1.4的数据持久化到mysql

下面测试了一下Nacos1.1.4版本的数据持久化到mysql8,先初始化mysql数据库:
22
然后按照之前的步骤,最后启动依然能启动成功,但是仍然会出现与Nacos1.2.0版本类似的问题,并且按照Nacos1.2.0的解决方式也不能解决问题。解决方式是需要对源码进行修改并重新打包构建。首先下载Nacos1.1.4源码
23
打开nacos1.1.4源码,修改Nacos主项目的根目录下的pom.xml文件中mysql-connector-java依赖的版本:
24
这里修改为8.0.18:

<!-- JDBC libs -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.18</version>
</dependency>

修改naming项目com.alibaba.nacos.naming.healthcheck包下的MysqlHealthCheckProcessor类的第24行的导包:
25
修改为:

import com.mysql.cj.jdbc.MysqlDataSource;

mysql8.0及其以上版本需要指定时区,所以还需要修改console项目resources/META-INFnacos-default.properties中的db.url
26
修改为:

db.url.0=jdbc:mysql://11.162.196.161:3306/diamond_devtest?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.url.1=jdbc:mysql://11.163.152.91:3306/diamond_devtest?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

然后进行打包,cmd命令窗口进入项目根目录执行:

mvn -Prelease-nacos -DskipTests clean install -U

执行成功之后打包生成的文件在项目根目录下的distribution\target中:
27
将打包生成的nacos-server-1.1.4.zip拷贝到自己定义好的目录解压,修改conf/application.properties文件,新增以下配置:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_1.1.4?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

启动Nacos服务器,新建一个配置文件:
28
查看配置列表,发现创建成功:
29
然后查看mysql中nacos_1.1.4数据库中的config_info表,可见Nacos服务器中的数据已经成功持久化到mysql中:
30

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RtxTitanV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值