a. 问题描述:No Datasource Set
b. 产生原因:
docker-compose
基于镜像mysql:8.0.28
,nacos/nacos-server:v2.0.4
构建一个mysql单机模式nacos
,在进行docker启动之后,nacos日志输出异常错误信息No Datasource Set
,最后导致nacos应用自我销毁。我使用mysql
命令行工具进行连接,,“欻”地一下就连上了,使用mysql的workbeanch
也可以轻易连上,我百思不得其解,这是为什么呢?明明可以连接呀!为什么会显示No Datasource Set
? 好久好久之后,我突然想到,nacos
是java项目,使用的是数据库连接驱动包,会不会是驱动包的问题。我刚好有个客户端Dbeaver
是使用数据库连接驱动包,我“咔”地打开一测试,显示Public Key Retrieval is not allowed
,哦哦哦…… 我是服了,这个跟没设置数据源有关系吗?输出一些不明所以的异常信息有个什么鬼用?
c. 解决方法:
增加mysql的连接url参数allowPublicKeyRetrieval=true
即可!其余的参数偶尔也会因为稀奇古怪的错,可加可不加,出错了再说😁
注意:对于使用
mysql
作为持久化的nacos
启动,mysql
数据库中必须存在相应的库nacos_config
(一般叫这个,可以改),并且相应的nacos
数据库表,docker
启动的mysql
可以通过MYSQL_DATABASE=nacos_config
指定创建一个新的数据库,通过挂载相应的数据卷path to/nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql
可以对该库执行sql脚本
!
version: "3.9"
services:
mysql:
image: mysql:8.0.28
container_name: mysql
ports:
- "3306:3306"
volumes:
- "/var/lib/docker/volumes/mysql_data:/var/lib/mysql"
- "./nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql"
environment:
- "MYSQL_ROOT_PASSWORD=123456"
- "MYSQL_DATABASE=nacos_config"
networks:
- "nacos_network"
nacos:
image: nacos/nacos-server:v2.0.4
container_name: nacos
ports:
- "8848:8848"
environment:
- "PREFER_HOST_MODE=hostname"
- "JVM_XMS=256m"
- "JVM_XMX=256m"
- "JVM_XMN=128m"
- "MODE=standalone"
- "SPRING_DATASOURCE_PLATFORM=mysql"
- "MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"
- "MYSQL_SERVICE_HOST=mysql"
- "MYSQL_SERVICE_PORT=3306"
- "MYSQL_SERVICE_USER=root"
- "MYSQL_SERVICE_PASSWORD=123456"
- "MYSQL_SERVICE_DB_NAME=nacos_config"
networks:
- "nacos_network"
depends_on:
- mysql
networks:
nacos_network: