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: