在學尚硅谷陽哥的SpringCloud視頻時,卡在了Nacos持久化這裏了。
我是在docker用nacos來連接本地的數據庫,一直連接不上,百度,bing,關於nacos做持久化的文章我基本都看了,花了一個晚上,還有一個早上的時間才成功連接上。
網上關於連接mysql8以上的解決辦法:
第一種解決辦法:
下載nacos源文件,然後去改pom文件,再去修改naming項目的com.alibaba.nacos.naming.healthcheck 包下的 MysqlHealthCheckProcessor 類:
把
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
改爲
import com.mysql.cj.jdbc.MysqlDataSource;
然後再把整個項目打包成jar包,替換掉nacos容器的target目錄裏的jar包,不過nacos源碼裏的pom文件引入的mysql驅動好像是8.0.13,不知道這個版本及以下的要不要往容器中放驅動,還是直接就可以啓動,如果mysql是8.0.13及以下的同學可以試試能不能按照mysql5.6的方式配置成功。
不過,這種方法只使用於nacos1.3以前的版本,1.3後MysqlHealthCheckProcessor已經沒有導入MysqlDataSource,所以用不了。
第二種解決辦法:
第二種方法是用docker-compose.yml去解決,因爲我比較菜,這種方法不會用,所以也沒去嘗試。
第三種解決辦法:
在nacos容器裏新建一個plugins/mysql目錄,然後把mysql8的驅動放到裏面,這種是可以的,不過中間還有以下操作需要做才能連接,下面我會詳細的寫出nacos1.3連接docker裏的mysql5.6和mysql8.0.18,你們按照需要選擇性的看。
具體操作
注意:需要先把linux的端口開啓,或者把防火牆關閉。
nacos-sql.sql文件:https://pan.baidu.com/s/1nsrZDBUw5rl7tCc-PQ_QAg 密碼:0acj
已添加create database nacos_config
,可以直接使用。
nacos容器連接mysql5.6容器
此標題最後有一條命令啓動的方式,可以看過程,也可以直接去看語句,不過數據庫要先配置好。
打開本機的終端:
#拉取mysql5.6鏡像
docker pull mysql:5.6
#拉取nacos1.3鏡像(此時最新版是1.3)
docker pull nacos
#運行(請注意,開放的是3305端口)
docker run -p 3305:3306 --name mysql5.6 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
#把sql文件複製到linux中
#scp 本機sql文件路徑 root@linuxip:linux路徑
scp /Users/pro/Downloads/nacos/conf/nacos-mysql.sql [email protected]:/home
#輸入linux的root用戶密碼進行傳輸,使用虛擬機的共享目錄也可以
打開linux終端:
#在linux把文件傳到mysql5.6容器中
#docker cp linux中文件的路徑 容器ID:容器內的路徑(這裏放在容器的/home目錄裏)
#容器ID用 docker ps 查看
docker cp /home/nacos-mysql.sql f5381aee7490:/home
#進入mysql5.6容器
docker exec -it 容器ID /bin/bash
#進入mysql
mysql -uroot -p123456 --default-character-set=utf8
#創建nacos_config數據庫
source /home/nacos-mysql.sql
#退出mysql
exit
#退出容器
exit
#運行nacos
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
#進入nacos1.3容器
docker exec -it 容器ID /bin/bash
cd conf
#備份application.properties
cp application.properties application.properties.bk
#修改application.properties文件
vim application.properties
#如果有提示,按Enter回車進入
根據自己的信息修改:
#按i進行編輯
spring.datasource.platform=mysql
...
#10.211.55.17是linux的IP地址,填localhost是無效的
#注意,這裏的端口號是3305
db.url.0=jdbc:mysql://10.211.55.17:3305/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
#註釋掉db.url.1
db.user=root
db.password=123456
#按esc鍵,然後 :wq! 退出
主要改4個地方:
- spring.datasource.platform
- db.url.0(註釋掉db.url.1)
- db.user
- db.password
#退出容器
exit
#重啓nacos
docker restart 容器ID
然後在瀏覽器輸入:http://10.211.55.17:8848/nacos
賬號和密碼都是nacos
因爲之前登錄了,所以直接跳到後臺了,然後新建配置:
#進入mysql5.6容器
docker exec -it 容器ID /bin/bash
#進入mysql
mysql -uroot -p123456 --default-character-set=utf8
#切換到nacos_config數據庫
use nacos_config;
#查看config_info表
select * from config_info;
成功寫到數據庫中,此時刪除nacos容器,再新建一個,只要配置是連接到這個數據庫的,都能還原之前的配置。
終極方式
一條命令啓動nacos:
#需要按照自己的配置進行修改,例如連接的數據庫IP地址,端口號
docker run --env MODE=standalone --name mynacos -d -p 8848:8848 -e MYSQL_SERVICE_HOST=10.211.55.17 -e MYSQL_SERVICE_PORT=3305 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_DATABASE_NUM=1 nacos/nacos-server
配置完數據庫後,直接用這條語句啓動一個nacos,可以看到前面的配置。
nacos容器連接mysql8.0.18容器
mysql8.0.18前面的操作和mysql5.6,只是多了一步,需要把mysql8的驅動移到容器中。
最下面有最便捷的啓動方式,同樣需要先配置好數據庫。
打開本機的終端:
#拉取mysql5.6鏡像
docker pull mysql:8.0.18
#拉取nacos1.3鏡像(此時最新版是1.3)
docker pull nacos
#運行(開放的是3306端口,和5.6的不同)
docker run -p 3306:3306 --name mysql8.0.18 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.18
#把sql文件複製到linux中
#scp 本機sql文件路徑 root@linuxip:linux路徑
scp /Users/pro/Downloads/nacos/conf/nacos-mysql.sql [email protected]:/home
#輸入linux的root用戶密碼進行傳輸,使用虛擬機的共享目錄也可以
打開linux終端:
#在linux把文件傳到mysql8.0.18容器中
#docker cp linux中文件的路徑 容器ID:容器內的路徑(這裏放在容器的/home目錄裏)
#容器ID用 docker ps 查看
docker cp /home/nacos-mysql.sql a6ea251d1758:/home
#進入mysql8.0.18容器
docker exec -it 容器ID /bin/bash
#進入mysql
mysql -uroot -p123456 --default-character-set=utf8
#創建nacos_config數據庫
source /home/nacos-mysql.sql
#退出mysql
exit
#退出容器
exit
#運行nacos
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
#進入nacos1.3容器
docker exec -it 容器ID /bin/bash
cd conf
#備份application.properties
cp application.properties application.properties.bk
#修改application.properties文件
vim application.properties
#如果有提示,按Enter回車進入
根據自己的信息修改:
#按i進行編輯
spring.datasource.platform=mysql
...
#10.211.55.17是linux的IP地址,填localhost是無效的
db.url.0=jdbc:mysql://10.211.55.17:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
#註釋掉db.url.1
db.user=root
db.password=123456
#按esc鍵,然後 :wq! 退出
主要改4個地方:
- spring.datasource.platform
- db.url.0(註釋掉db.url.1)
- db.user
- db.password
我已經把我自己有的mysql驅動都放在百度雲了,需要的可以直接拿:https://pan.baidu.com/s/1-IH5StRps_kCZBxmAwdjsg 密碼:gsv3
這裏需要把mysql8的驅動放到容器中,可以打開自己的maven下載的jar包的目錄。
因爲我的是8.0.18,所以用這個爲例:
在本機的終端:
#把驅動從本地傳到linux中
#scp 本機sql文件路徑 root@linuxip:linux路徑
scp /Users/pro/apache-maven-3.5.4/maven_repository/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar [email protected]:/home
#輸入linux的root用戶密碼進行傳輸,使用虛擬機的共享目錄也可以
在容器中:
#在nacos1.3容器中的nacos目錄下新建plugins/mysql二級目錄(plugins和conf同級)
mkdir -p plugins/mysql
#退出容器
exit
在linux終端:
#把驅動傳入容器中
docker cp /home/mysql-connector-java-8.0.18.jar df6001cf4ff3:/home/nacos/plugins/mysql
#重啓nacos
docker restart 容器ID
然後在瀏覽器輸入:http://10.211.55.17:8848/nacos
賬號和密碼都是nacos
然後新建配置:
#進入mysql8.0.18容器
docker exec -it 容器ID /bin/bash
#進入mysql
mysql -uroot -p123456 --default-character-set=utf8
#切換到nacos_config數據庫
use nacos_config;
#查看config_info表
select * from config_info;
終極方式
mysql8稍微麻煩一點,配置完數據庫後,先啓動nacos:
#1. 先啓動nacos
#按照自己的信息修改
docker run --env MODE=standalone --name mynacos2 -d -p 8848:8848 -e MYSQL_SERVICE_HOST=10.211.55.17 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_DATABASE_NUM=1 nacos/nacos-server
#2. 新建目錄(當前位置在/home)
mkdir -p plugins/mysql
#3. 把驅動放到目錄裏(當前位置在/home,驅動也在此目錄)
mv mysql-connector-java-8.0.18.jar plugins/mysql/
#4. 把整個文件docker cp進容器
docker cp plugins 容器ID:/home/nacos
#5. 重啓nacos
docker restart 容器ID
同樣可以訪問到之前的配置:
這是我遇到問題後的解決辦法,如果試了我的方法後還不行,可以先檢查一下自己有沒有地方寫錯了,IP地址,url,數據庫名等這些,然後還是不行,那就需要再去網上找找資料了。
下一篇:在Docker上用3個Nacos1.3容器+一個MySQL5和8容器+一個Nginx容器進行集羣的具體操作(Nacos集羣版)