Nacos连接Mysql8连接失败问题

一、问题复现

Nacos、Mysql 容器均开机自启。

Nacos 配置了 Mysql,配置确认没有问题,发现每次重启服务器,Nacos都无法直接成功连接 mysql。每次启动完 Nacos 后,需要用 Datagrip 连接一次 Mysql,再 docker restart nacos 才可以连上 Mysql。

Nacos 启动报错  No DataSource set,详情如下

很显然数据库没连上,经过百度搜索后,整理出一个解决方案。

解决方案之前,先看我的 nacos docker 启动参数:

docker run -d \
-e NACOS_AUTH_ENABLE=true \
-e MODE=standalone \
-e JVM_XMS=128m \
-e JVM_XMX=128m \
-e JVM_XMN=128m \
-p 8848:8848 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=XXX.XXX.XX.XXX \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=这里是密码嘻嘻嘻 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false' \
--restart=always \
--privileged=true \
-v /home/data/nacos/logs:/home/nacos/logs \
--name xdclass_nacos_auth \
nacos/nacos-server:2.0.2

二、解决方案

第一步:nacos配置的用户事root登录,先配置mysql用户表,修改root用户权限,使其能够实现远程登录(我的mysql版本是8.0)

-- 查看用户权限
select host,user from user;

-- 修改root权限,可以远程登录
update user set host='%' where user='root';

-- 刷新权限
flush privileges;

--------------------------------------- 分割线 ---------------------------------------

-- MySQL8以前的版本,给root用户授权的语句,如下:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
-- 注:
-- All : 表示所有操作,比如select,update,insert等操作
-- *.* :表示所有库的所有表(test.*则表示test库的所有表)
-- root :表示授权的用户名
-- % :表示可以从任意地方登录,如改成192.168.0.999,则表示只能从ip地址为192.168.0.999的机器登录
-- 123456 :表示授权的用户名的密码

第二步:修改nacos 启动参数

方案① 第一次run镜像的时候,可以在参数上修改一波

在mysql连接参数后面加上一个 &allowPublicKeyRetrieval=true 

解释:"&allowPublicKeyRetrieval=true" 是 MySQL 数据库连接字符串中的一个参数,用于允许在 SSL 连接情况下获取公钥。

docker run -d \
-e NACOS_AUTH_ENABLE=true \
-e MODE=standalone \
-e JVM_XMS=128m \
-e JVM_XMX=128m \
-e JVM_XMN=128m \
-p 8848:8848 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=XXX.XXX.XX.XXX \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=这里是密码嘻嘻嘻 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true' \
--restart=always \
--privileged=true \
-v /home/data/nacos/logs:/home/nacos/logs \
--name xdclass_nacos_auth \
nacos/nacos-server:2.0.2

方案② 我直接在docker容器的配置文件改了,如下

systemctl stop docker 关闭 docker

# 进入该容器的配置文件所在目录
cd /var/lib/docker/containers/[容器ID]

# 更改配置文件
vim config.v2.json

 在后面加了 \u0026allowPublicKeyRetrieval=true

 最后重启 docker 万事大吉,溜溜球~

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElendaLee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值