MySQL数据库远程连接很慢的解决方案
有次同事提出开发使用的MySQL数据库连接很慢,因为我们的MySQL开发数据库是单独一台机器部署的,所以认为可能是网络连接问题导致的。
在进行ping和route后发现网络通信都是正常的,而且在MySQL机器上进行本地连接发现是很快的,所以网络问题基本上被排除了。以前也遇到过一次这样的问题,可后来就不知怎么突然好了,这次又遭遇这样的问题,所以想看看是不是MySQL的配置问题。在查询MySQL相关文档和网络搜索后,发现了一个配置似乎可以解决这样的问题,就是在MySQL的配置文件中增加如下配置参数:
[mysqld] skip-name-resolve
在Linux下配置文件是/etc/my.cnf,在windows下配置文件是MySQL安装目录下的my.ini文件。注意该配置是加在[mysqld]下面,在更改配置并保存后,然后重启mysql并远程连接测试,一切恢复如初。该参数的官方解释信息如下:
HowMySQLusesDNS
Whenanewthreadconnectstomysqld,mysqldwillspawnanewthreadtohandletherequest.Thisthreadwillfirstcheckifthehostnameisinthehostnamecache.Ifnotthethreadwillcallgethostbyaddr_r()andgethostbyname_r()toresolvethehostname.
Iftheoperatingsystemdoesn'tsupporttheabovethread-safecalls,thethreadwilllockamutexandcallgethostbyaddr()andgethostbyname()instead.Notethatinthiscasenootherthreadcanresolveotherhostnamesthatisnotinthehostnamecacheuntilthefirstthreadisready.
YoucandisableDNShostlookupbystartingmysqldwith–skip-name-resolve.InthiscaseyoucanhoweveronlyuseIPnamesintheMySQLprivilegetables.
IfyouhaveaveryslowDNSandmanyhosts,youcangetmoreperformancebyeitherdisablingDNSlookopwith–skip-name-resolveorbyincreasingtheHOST_CACHE_SIZEdefine(default:128)andrecompilemysqld.
Youcandisablethehostnamecachewith–skip-host-cache.YoucanclearthehostnamecachewithFLUSHHOSTSormysqladminflush-hosts.
Ifyoudon'twanttoallowconnectionsoverTCP/IP,youcandothisbystartingmysqldwith–skip-networking.