个别服务器通过公网登录MySQL数据库慢
今天在线上生产环境上遇到了部分服务器公网登录MySQL数据库慢的问题,经过一大圈兜兜转转终于是将问题解决了,心情有些复杂,还是决定将问题记录下来,希望后续能给遇到此问题的同学一个借鉴。
现象
通过使用多台服务器使用公网登录MySQL服务器进行测试,发现其中有的服务器登录数据库时可以马上相应,但是有的服务器登录却要等待10s-20s才会响应,但是从服务器上直接telnet端口立即返回连接成功,由此判断此问题不是由于网络问题导致,怀疑是由于MySQL数据库的反向解析导致(这就是上面为什么说心情复杂的原因:因为判断正确了,但是事情却远没有这么简单。),查看了MySQL的配置以及全局变量。
my.cnf:skip-name-resolve 有此项配置
排查过程
查看结果是否可以稳定复现
很多时候我们只相信亲眼看到的,所以无论是自己还是其他人反馈的问题,如果我有环境都会先测试是否可以复现此问题,如果可以复现在根据日志或其他信息排查出现该问题的原因。
通过两台机器多次测试登录服务器所需的时间,发现确实部分机器稳定复现登录慢的问题。
判断由于数据库域名反向解析导致(第一判断)
第一判断此问题是由于域名反向解析问题导致,原因如下:
- 部分服务器登录速度正常,部分服务器登录慢。
- 测试网络延时很低,且测试连接数据库端口立即返回连接成功。
根据以上两点判断:网络正常、数据库基础功能正常。但是由于查看了数据库内的变量信息以及数据库配置文件,确认跳过域名解析配置已经生效,将此怀疑降低。
抓包
数据库端:tcpdump -w a.cap -i eth0 port 3306
客户端:正常登录数据库
根据抓包信息发现登录数据库慢的服务器在MySQL建立连接前要消耗20s,最终定位到还是由于域名反向解析导致。
最终解决
最终将MySQL服务器上的hosts文件配置上登录数据库慢的公网地址和主机名的对应关系,此处的主机名随机生成,只是为了登录数据库不通过反向解析流程,添加后发现登录数据库慢的问题果然解决了,看来MySQL的skip-name-resolve也不是很靠谱,然后测试了下MariaDB发现没有开启跳过域名解析的这个功能都可以正常登录数据库服务器很崩溃。。。
如果方便的话也可以联系公网地址的供应商来添加IP地址的反解记录,当然写hosts文件是最快的,但是需要我们手动维护。
博客地址:https://www.cnblogs.com/Cherry-Linux
座右铭:人总是这么痛苦吗?还是只有小时候这样?总是如此。