写在前面的文章
- SpringCloudAlibaba快速入门(1)基于Nacos实现服务注册与发现
- SpringCloudAlibaba快速入门(2)基于Nacos构建分布式配置中心
- SpringCloudAlibaba快速入门(3)Nacos配置多环境管理
在之前的文章中,我们已经学习了 Nacos 作为服务注册中心及配置中心,与 Spring Cloud 体系结合的基础使用方法,其中 Nacos 都是以单机模式运行,数据默认保存在本地的内嵌数据库中,用于学习这没有问题,但是生产环境中基于高可用原则则需要对 Nacos 进行集群部署,那么数据保存本地则会出现一致性问题。为了解决这个问题,Nacos 采用了集中式存储的方式来支持集群化部署,目前只支持 MySQL 存储。
实战
第一步:安装 Mysql 数据库,版本要求:5.6.5+
目前不支持 8.0 以上版本,可以通过修改源码解决
拉取镜像
docker pull mysql:5.7
创建 my.cnf,用于设置字符集以及 sql_mode
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
sql-mode="ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
启动镜像
docker run --name mysql57 -p 3306:3306 \
-v /data/mysql/my.cnf:/etc/my.cnf \
-v /data/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
进入容器
docker exec -it mysql57 bash
使用 root 帐号登录
mysql -u root -p
创建用户并分配权限
CREATE USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%';
flush privileges;
第二步:初始化数据库
初始化脚本在 Nacos 程序包下的 conf
目录下的 nacos-mysql.sql
文件
第三步:配置 Nacos
修改 Nacos 程序包下 conf/application.properties
文件,添加 MySQL 数据源配置
文件中有示例,只需要打开注释并修改即可
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3316/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=test
db.password=123456
打完收工。重新访问 http://localhost:8848/nacos/
,并根据之前学习的 基于Nacos构建分布式配置中心
中的步骤可以再重新操作一篇,
同时可以登录数据库查看,验证数据是否成功入库。
扩展
Nacos 数据持久化支持 mysql8.0
Nacos 默认使用的 mysql 驱动版本为 5.1.34
,因为版本太低,所以导致不支持 mysql8.0 版本,只能通过修改源码重新打包的方式进行处理。