Case

开发测试中,测试服务器A和生产数据库服务器B位于内网同一网段,但是从服务器A连接数据库B大概需要10s的时间,命令行下ping,时间为0.001ms。

Why

对相关case进行搜索查询,查到了cnblogs上面这样一篇文章。

联想到之前远程登录ssh的时候,sshd的相关配置貌似也有一个DNS解析和反解的过程,估计大概就是这个情况。

MySQL为什么要对这个DNS进行反查呢?

原因大概是我们在授权GRANT的时候,有时会授予root@a.com这样的域名,所以MySQL就需要反查连接过来的IP到底是不是这个Domain呢。

禁用掉这个功能之后,肯定授权就只能IP了。

Solution

根据文章中的方法,需要进行mysql重启操作:

在my.cnf中添加如下配置
[mysqld]
skip-name-resolve

重启mysql服务

但是,这台服务器B是线上的生产数据库,不能随意重启,于是想到改数据库服务器B的hosts是否会生效呢?

# 在服务器B上面,对服务器A的内网IP写随便一个域名
192.168.1.1 ServerA

修改完成后,mysql的连接问题得到了解决。

Tips

DNS的确是基础服务一个不可或缺的部分,包括服务发现、服务降级在内,很多服务架构都需要这东西。

不过这也算小公司运维欠缺的一个坑吧。