本文的起因是某天在用 freshrss 的时候突然报错
Access to database is denied for *** : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for ***.sql.tencentcdb.com failed: Try again
其中的关键信息我使用 * 进行了替代
就提示消息的显示,是指数据库连接不上,但是我也有在用腾讯云的其他数据库服务,并没有出问题。
接下来就是逐一进行排除:
我在本地手动连接了 freshrss 的数据库,成功!由此判断数据库本身没有问题。
既然数据库没有问题,那就是服务器的问题,开始检查网络连接,一切正常,除了这个数据库,其他的不受影响。
然后我在想,是不是网络协议栈中的某一层出错了。
试着用
nslookup
看一下域名信息,查不到 ╰( ̄ω ̄o) ,好了找到病灶了,开始动手术。先看其他域名是否正常,使用
nslookup baidu.com
是成功解析的,那估计就是现在配置的域名服务器没有收录这个域名结果一看,原本的就配置了个本地服务器。。。,加上阿里的公共 DNS 解析服务器
sudo nano /etc/resolv.conf
上面只是临时修改 dns,重启后即失效下面是永久修改
修改 /etc/systemd/resolved.conf 文件
vi /etc/systemd/resolved.conf
这里我们可以看到这些参数:
# 指定 DNS 服务器,以空白分隔,支持 IPv4 或 IPv6 位置 DNS=8.8.8.8 114.114.115.115 # 备用 DNS 服务器 FallbackDNS=8.8.8.8 # 设置搜索域名 Domains=domain.com # 设置 LLMNR 是否激活,可用的选项有 yes、no、resolve LLMNR=yes # 设置 MulticastDNS 是否激活,可用的选项有 yes、no、resolve MulticastDNS=yes # 设置 DNSSEC 是否激活,可用的选项有 yes、no、allow-downgrade DNSSEC=yes # 设置缓存是否激活,可用的选项有 yes、no、no-negative Cache=no-negative
根据需要修改 resolved.conf 文件中的DNS,然后保存。
重启 systemd-resolved 服务
systemctl restart systemd-resolved
设置开机启动 systemd-resolved 服务
systemctl enable systemd-resolved
备份 systemd-resolved 托管文件 resolv.conf
mv /etc/resolv.conf /etc/resolv.conf.bak
重新生成。
ln -s /run/systemd/resolve/resolv.conf /etc/