用strace-f-F-r-oaa.txtmysqld_safe--user=mysql-h192.168.1.2追踪,发现有个调用时间非常长,可惜看不懂:
正常:
0.000061write(3,":\0\0\1\205\246\3\0\0\0\0\1!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,62)=62
异常
5.000813write(3,":\0\0\1\205\246\3\0\0\0\0\1!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,62)=62
上下午见文章后面
------------------------------------------------
今天早上开发那边发现mysql连接很慢,登陆到服务器上查看服务器日志都是正常的,无可疑记录,刚刚还好好的,怎么突然出现这个问题,于是登陆到mysql服务器上,查看下进程,发现有很多这样的连接:
218|unauthenticateduser|192.168.10.6:44500|NULL|Connect|NULL|login|NULL
219|unauthenticateduser|192.168.10.6:44501|NULL|Connect|NULL|login|NULL
原因是由于mysql对连接的客户端进行DNS反向解析。
有2种解决办法:
1,把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字就可以了。
2,在my.cnf中加入�Cskip-name-resolve。
对于第一种方法比较笨,也不实用,那么skip-name-resolve选项可以禁用dns解析,但是,这样不能在mysql的授权表中使用主机名了,只能使用IP。
我理解mysql是这样来处理客户端解析过程的,
1,当mysql的client连过来的时候,服务器会主动去查client的域名。
2,首先查找/etc/hosts文件,搜索域名和IP的对应关系。
3,如果hosts文件没有,则查找DNS设置,如果没有设置DNS服务器,会立刻返回失败,就相当于mysql设置了skip-name-resolve参数,如果设置了DNS服务器,就进行反向解析,直到timeout。
有一点不明白,为什么连接mysql服务器内网的ip地址也要进行DNS反向解析,而这时候DNS解析返回给mysql的是什么呢?
望高手解答。
-----------------------------------------
如果不配置dns解析,它会直接返回失败,所以很快。
如果配置了错误的dns,它会向这个错误的dns发送解析请求,并等待结果,一直到超时,所以慢
----------------------------------------------------------
0.000019munmap(0x2ad4e3f4d000,4096)=0
43600.000026rt_sigaction(SIGPIPE,{0x1,[PIPE],SA_RESTORER|SA_RESTART,0x430060},{SIG_DFL,[],0},8)=0
43600.000046socket(PF_INET,SOCK_STREAM,IPPROTO_IP)=3
43600.000046fcntl(3,F_SETFL,O_RDONLY)=0
43600.000020fcntl(3,F_GETFL)=0x2(flagsO_RDWR)
43600.000022connect(3,{sa_family=AF_INET,sin_port=htons(3306),sin_addr=inet_addr("192.168.1.2")},24)=0
43600.000203setsockopt(3,SOL_SOCKET,SO_RCVTIMEO,"\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0",16)=0
43600.000035setsockopt(3,SOL_SOCKET,SO_SNDTIMEO,"\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0",16)=0
43600.000038setsockopt(3,SOL_IP,IP_TOS,[8],4)=0
43600.000031setsockopt(3,SOL_TCP,TCP_NODELAY,[1],4)=0
43600.000029setsockopt(3,SOL_SOCKET,SO_KEEPALIVE,[1],4)=0
43600.000036read(3,"8\0\0\0\n5.1.48-log\0\1\0\0\0x)\\wcg\\u\0\377\367\10"...,16384)=60
43605.000813write(3,":\0\0\1\205\246\3\0\0\0\0\1!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,62)=62
43600.000051read(3,"\7\0\0\2\0\0\0\2\0\0\0",16384)=11
43600.000143rt_sigaction(SIGINT,{0x403ec0,[INT],SA_RESTORER|SA_RESTART,0x430060},{SIG_DFL,[],0},8)=0
43600.000045rt_sigaction(SIGQUIT,{0x403c10,[QUIT],SA_RESTORER|SA_RESTART,0x430060},{SIG_DFL,[],0},8)=0
43600.000046fstat(1,{st_mode=S_IFCHR|0620,st_rdev=makedev(136,0),...})=0
43600.000045mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0)=0x2ad4e3f4d000
43600.000042write(1,"WelcometotheMySQLmonitor.C"...,58)=58