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:
