IDEA连接redis数据库时出现Failed to connect to any host resolved for DNS name.
Linux发行版
本篇的实验版本是RockyLinux8.10版本
基于Debian的UbuntuLinux发行版默认防火墙是关闭的,而基于RHEL(CentOS)的RockLinux发行版防火墙默认是开启的,idea连接出现问题很大概率就是这个导致的
这里包含两个环节:
DNS name → 指的是域名解析(把名字解析成 IP,比如
redis-server.local
→192.168.135.131
)。Failed to connect → 说明 IP 已经解析到了,但是连接不上端口。
也就是说:
如果是 DNS 问题,那压根不会拿到 IP,就会报 Unknown host、Name or service not known 这类错误。
既然能显示
Failed to connect
,就说明 DNS 是正常的,问题在网络连通性(防火墙、端口没开、服务没监听)。
1.Linux系统上的检查操作
1.1确认 Redis 服务是否运行
在进行网络方面的检查之前,需要做的前提操作是确认redis服务是否正常运行
systemctl status redis
active (running) → Redis 正常启动
inactive (dead) → Redis 没启动,执行
如果检查到发现redis服务没启动就执行下面的命令:
systemctl start redis
1.2确认redis配置文件操作
配置文件所在路径
/etc/redis.conf
修改配置文件之前首先备份,记得先执行命令:cp -p /etc/redis.conf /etc/redis.conf.bak,将配置文件先拷贝一份
设置连接密码(不是必要的,不做也行)
# 1.配置文件中对应的配置requirepass 123456 #其中123456为设置的密码# 2.修改完成后重启Reids服务systemctl restart redis# 3.客户端连接测试redis-cli -h 127.0.0.1 -p 6379 -a 123456127.0.0.1:6379>PING
设置允许远程连接
# 1.注释掉配置文件中的本地IP地址绑定bind 127.0.0.1# 2.关闭保护模式(把yes改为no)protected-mode no# 3.重启Redis服务systemctl restart redis
1.3确认 Redis 是否监听外网地址
ss -tnlp | grep 6379
ss -tnlp | grep 6379
的整体作用是:
检查当前系统中是否有进程正在监听 6379 端口,并找出是哪个进程。
在这里如果redis服务器未启动就会像图中内容这样,不能连接redis(此时开启redis服务即可)
正确的结果,你应该看到:
LISTEN 0 128 0.0.0.0:6379 ...
0.0.0.0:6379
→ 接收所有网卡的连接(外部可访问)127.0.0.1:6379
→ 只能本机访问,需要编辑配置文件/etc/redis.conf
服务状态:Redis 服务已成功启动并在运行中。
监听端口:正在默认的 6379 端口监听连接。
网络访问:
可以通过服务器的 IPv4 地址(如
192.168.1.100:6379
)访问 Redis。如果服务器配置了 IPv6,也可以通过 IPv6 地址访问。
监听在
0.0.0.0
和[::]
意味着可以从网络上的其他机器连接到此 Redis 服务(如果防火墙允许)。进程信息:Redis 服务器进程的 ID 是 4522。如果您需要管理(如停止)这个服务,这个信息很有用。
注意,我们每次执行一个步骤,就尝试一下是否IDEA可以正确连接redis
1.4检查 Linux 防火墙 (firewalld)
firewall-cmd --list-portsfirewall-cmd --list-services
如果没有
6379/tcp
,说明端口没放行。临时关闭防火墙测试:
systemctl stop firewalld
如果能连上 → 就是防火墙问题。
如果是我们新手小白局域网下学习,而非在公网可访问状态下,其实我们把防火墙关掉了也是没有任何影响的。
(需要重启生效)
如果关闭后能连上 → 问题在 SELinux,可以考虑在 /etc/selinux/config
里改成:
1. 临时关闭(重启后会恢复)
systemctl stop firewalld
2. 永久关闭(重启后也不会启动)
systemctl disable firewalld systemctl stop firewalld
disable
会让 firewalld 不随系统启动。3. 重新开启
如果你想再打开防火墙:
systemctl start firewalld systemctl enable firewalld
查看防火墙状态
systemctl status firewalld
1.5确认检查 SELinux
有些系统 SELinux 会拦截。
查看 SELinux 状态:
getenforce
Enforcing
→ 开启Permissive/Disabled
→ 已关闭
临时关闭:
setenforce 0
2.Windows系统上的检查操作
测试连通性(PowerShell):
Test-NetConnection 192.168.135.131 -Port 6379
TcpTestSucceeded : True
→ 通了False
→ 网络、防火墙或 SELinux 问题
在执行这个操作前也可以先cmd,然后ping一下你的linux ip地址看看是否能正常连接
经过上面一通操作,大概就能找到病因所在,并解决了,总共就几个病因,无非就是redis没有启动,配置文件没有修改或者修改错了,redis没有监听外网地址,linux防火墙问题(一般都是这个),还有ssh问题