category
技术分享
date
Jul 31, 2022
icon
Origin
password
slug
StrangeQuestionTwo
status
Published
summary
一次避坑指南
tags
Tags
type
Post
现有设备:
系统: macos
软件: Docker、Nacos、Mysql
问题:
Nacos更改数据库,从内置的Derby改为Mysql数据库是一件非常普遍的操作,也是Nacos持久化中很重要的一环。但是我目前的设备是myqsl和nacos都是用Docker启动的,这里面有一个大坑,让我搞了好久。在此记录一下。
步骤:
Mysql新建Nacos数据库:
create database nacos_config初始化数据库,导入初始化文件nacos-db.sql:
获取Docker内Mysql的地址IP:
这一条非常重要‼️ 这一条非常重要‼️ 这一条非常重要‼️
新启动一个终端,查找Docker内Mysql的地址:
docker inspect mysql(容器名)
在这里我们可以看到,IPAddress字段,Copy这个地址,放到下面application.properties文件中的地址里面。

更改Nacos配置:
如果你使用的是Docker软件的话,我比较推荐使用,软件的方式打开控制台,还挺方便的。也可以使用命令行的方式进入容器内部。这个我就不细讲了。因为我是M1pro芯片,因为架构不同,所以使用的Nacos版本也会不同。具体如下:

点击CLI按钮,弹出终端:

默认是直接进入/bin目录下面的,接下路输入:
cd conf

然后编辑 application.properties文件:
vim application.properties
具体如下:
# spring server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos} server.contextPath=/nacos server.port=${NACOS_APPLICATION_PORT:8848} spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:mysql} nacos.cmdb.dumpTaskInterval=3600 nacos.cmdb.eventTaskInterval=10 nacos.cmdb.labelTaskInterval=300 nacos.cmdb.loadDataAtStart=false db.num=${MYSQL_DATABASE_NUM:1} db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST:你的地址(上面步骤中Mysql的地址)}:${MYSQL_SERVICE_PORT:你的端口} /${MYSQL_SERVICE_DB_NAME:数据库名称}? ${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8 &connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false &serverTimezone=UTC&allowPublicKeyRetrieval=true} #db.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}: #${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false} db.user=${MYSQL_SERVICE_USER:你的用户名} db.password=${MYSQL_SERVICE_PASSWORD:你的密码} ### The auth system to use, currently only 'nacos' is supported: nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos} ### The token expiration in seconds: nacos.core.auth.default.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000} ### The default token: nacos.core.auth.default.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789} ### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay. nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false} nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false} nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity} nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security} server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false} server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D # default current work dir server.tomcat.basedir= ## spring security config ### turn off security nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**} # metrics for elastic search management.metrics.export.elastic.enabled=false management.metrics.export.influx.enabled=false nacos.naming.distro.taskDispatchThreadCount=10 nacos.naming.distro.taskDispatchPeriod=200 nacos.naming.distro.batchSyncKeyCount=1000 nacos.naming.distro.initDataRatio=0.9 nacos.naming.distro.syncRetryDelay=5000 nacos.naming.data.warmup=true
上面红字的部分是你需要更改的。更改之后启动Nacos,会发现启动成功。不会报出 No DataSource set的错误。
总结:
一直以来我使用Docker中的Mysql 数据库访问的都是0.0.0.0:3306这个地址端口。但是这应该是外部访问容器内的地址。容器内的两个应用互相访问应该是不同的。应该先获取Mysql的地址然后再去配置。这个问题花费了我很多时间,在此做一个记录,希望可以帮助用同样问题的朋友。
- 作者:LiuJixue
- 链接:https://liujixue.cn/article/StrangeQuestionTwo
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。





