欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)

程序员文章站 2023-12-27 09:10:27
...

在学尚硅谷阳哥的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包。

不过,这种方法只使用于nacos1.3以前的版本,1.3后MysqlHealthCheckProcessor已经没有导入MysqlDataSource,所以用不了。

第二种解决办法:

第二种方法是用docker-compose.yml去解决,因为我比较菜,这种方法不会用,所以也没去尝试。

第三种解决办法:

在nacos容器里新建一个plugins/mysql目录,然后把mysql8的驱动放到里面,这种是可以的,不过中间还有以下操作需要做才能连接,下面我会详细的写出nacos1.3连接docker里的mysql5.6和mysql8.0.18,你们按照需要选择性的看。

具体操作

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

#运行(请注意,开放的是3305端口)
docker run -p 3305:3306 --name mysql5.6 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

#把sql文件复制到linux中
#scp 本机sql文件路径 aaa@qq.com:linux路径
scp /Users/pro/Downloads/nacos/conf/nacos-mysql.sql aaa@qq.com:/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

#进入nacos1.3容器
docker exec -it 容器ID /bin/bash

#修改application.properties文件
vim conf/application.properties
#如果有提示,按Enter回车进入

在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
根据自己的信息修改:

#按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

因为之前登录了,所以直接跳到后台了,然后新建配置:
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(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;

在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
成功写到数据库中,此时删除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,可以看到前面的配置。
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)

nacos容器连接mysql8.0.18容器

mysql8.0.18前面的操作和mysql5.6,只是多了一步,需要把mysql8的驱动移到容器中。

最下面有最便捷的启动方式,同样需要先配置好数据库。

打开本机的终端:

#拉取mysql5.6镜像
docker pull mysql:8.0.18

#运行(开放的是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文件路径 aaa@qq.com:linux路径
scp /Users/pro/Downloads/nacos/conf/nacos-mysql.sql aaa@qq.com:/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

#进入nacos1.3容器
docker exec -it 容器ID /bin/bash

#修改application.properties文件
vim conf/application.properties
#如果有提示,按Enter回车进入

在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
根据自己的信息修改:

#按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包的目录。
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
因为我的是8.0.18,所以用这个为例:
在本机的终端:

#把驱动从本地传到linux中
#scp 本机sql文件路径 aaa@qq.com: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 aaa@qq.com:/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

然后新建配置:
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(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;

在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)

终极方式

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

同样可以访问到之前的配置:
在Docker上用Nacos1.3容器连接MySQL5.6和8.0.18容器进入持久化的具体操作(Nacos单机版)

这是我遇到问题后的解决办法,如果试了我的方法后还不行,可以先检查一下自己有没有地方写错了,IP地址,url,数据库名等这些,然后还是不行,那就需要再去网上找找资料了。

相关标签: 遇到的坑

上一篇:

下一篇: