在Docker上用Nacos1.3容器連接MySQL5.6和8.0.18容器進入持久化的具體操作(Nacos單機版)

在學尚硅谷陽哥的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集羣版)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章