MySQL问题解决记录(1):IP address 'xxx.xxx.xxx.xxx' could not be resolved: 这是在主机名解析时通常出现的暂时错误,它意味着本地服务器没有从权威服务器上收到响应。

问题描述

[Warning] [MY-010055] [Server] IP address 'xxx.xxx.xxx.xxx' could not be resolved: 这是在主机名解析时通常出现的暂时错误,它意味着本地服务器没有从权威服务器上收到响应。

  • 问题表现:A主机的服务在访问B主机的MySQL数据库时,产生有规律的断连,频次大概是失败一次,然后成功5秒,再失败一次,再成功5秒。
  • 部署结构:
    • 系统:A、B主机都是Windows Server 2019系统。
    • 网络结构:A主机拥有公网IP(用IP1代表),B主机是云服务器,也拥有公网IP(用IP2代表)
    • MySQL配置:MySQL数据库使用默认安装配置。
    • 访问方式:A主机使用固定IP方式访问B主机MySQL,B主机MySQL使用IP限制的方式允许A主机使用特定账号访问。

排查流程

  1. 怀疑网络不稳定
    • 使用Ping方式测试A主机到B主机的延迟,但是结果延迟非常稳定。
  2. 怀疑是端口不稳定
  3. 检查系统hosts文件
    • 并没有发现会影响3306端口服务的配置。
  4. 修改配置
    • 在my.ini配置文件中[mysqld]区块增加skip-name-resolve配置,然后重启数据库。
    • 因为会导致域名访问失效,所以并未尝试是否可行。(增加了这个配置会导致MySQL的mysql.user表中Host部分使用localhost配置的用户都无法正常登陆,因为localhost虽然等同于127.0.0.1,但是这是一个域名,增加了禁止域名解析的配置后,会导致所有的域名配置失效,同时所有使用域名访问数据库的方式都会失效)
  5. 查B主机MySQL日志
    • 在MySQL安装的实例目录下,可以找到一个名字是主机名.err的文本文件,打开以后找到了非常多的 这是在主机名解析时通常出现的暂时错误,它意味着本地服务器没有从权威服务器上收到响应。日志。
    • 在这里分析是不是MySQL会对所有请求做一次DNS域名解析,然后再完成响应呢?
    • 到主机B的网络设置中检查网络配置,发现IPv4中没有配置DNS服务器地址。

解决方案

  1. 配置DNS服务器地址
    • 114.114.114.114 & 114.114.115.115
    • 配置完毕以后保存并关闭设置。
  2. 使用主机A再次测试与主机B的MySQL连接稳定性,发现没有断联的情况,问题解决。

总结

就是因为MySQL的机制在收到请求以后,会走一遍DNS域名解析,哪怕全程都使用IP来访问,也会走DNS解析,需要配置对了系统的DNS域名解析服务器。

posted @ 2024-11-11 11:35  苍凉温暖  阅读(369)  评论(0编辑  收藏  举报