NACOS启动连接数据库失败
运行环境
操作系统:ubuntu20.04 双网卡
数据库:mysql8.0.36
nacos版本:nacos2.2.3
问题表现
外网环境下docker-compose启动nacos成功,切换到内网之后,重启docker-compose,nacos启动失败,提示数据库连接失败
问题排查
- 排除数据库配置问题,查到网上很多资料说是数据库配置错误,但是外网环境下nacos能正常启动,说明配置是正确的;
- 怀疑可能是docker容器内部无法访问数据库,进入容器测试发现3306端口是连通的,故排除网络问题;
- 查看mysql日志
tail -f /var/log/mysql/error.log
根据日志可知:Nacos 容器的 IP 地址 172.18.0.5 无法被 MySQL 服务器解析,不过这个只是warning日志,实际不影响系统使用。 - 改成本地部署nacos测试,发现使用127.0.0.1可以连接数据库,但使用服务器ip连接数据库失败
查看数据库用户配置:
select user,host,plugin from mysql.user where user='root';
发现使用localhost连接数据库使用的密码认证插件为mysql_native_password,通过ip连接数据库使用的密码认证插件为caching_sha2_password。
到这里问题基本可以确定:nacos连接mysql数据库,服务器不能访问外网,使用caching_sha2_password认证插件连接数据库,导致认证失败
- 更改用户’root’@'%'认证插件为mysql_native_password
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
更改后测试结果依然是连接数据库失败,怀疑可能是nacos使用ip连接数据库时不支使用mysql_native_password认证插件
-
可能是由于 caching_sha2_password 插件在初次连接时需要通过网络进行密钥交换
修改数据库配置中RSA密钥文件路径:
[mysqld]
# Ensure the correct authentication plugin is set
default_authentication_plugin=caching_sha2_password
# Set the paths for the private and public keys
caching_sha2_password_private_key_path=/path/to/private_key.pem
caching_sha2_password_public_key_path=/path/to/public_key.pem
网络配置dns问题
使用外网配置了dns,切回内网之后需要删除dns配置
结论
- 采用本地部署nacos,通过localhost连接数据库可以保证正常连接数据库
- nacos通过ip访问数据库问题未解决,期待遇到过类似问题的小伙伴反馈