MySQL远程访问时非常慢的解决办法
By admin
- One minute read - 91 words法一:
先是上网找了一下资料,说是MYSQL会反查DNS,比较烦人的,2楼写上网上搜索到的资料(有弊端),先说一下我的处理办法
今天有两个网站(A站和B站),程序一样,分别放在两台服务器,数据库放在A站,B站程序的数据库连接,指向A站IP
但是访问B站的时候,速度奇慢,这两台服务器还都在同一机房,应该属于局域网,查到资料说是MYSQL对DNS进行反查,这样也好办,我只有这一个站需要远程访问MYSQL,设置一下HOSTS文件,不让A站(数据库服务器端)反查DNS就行了
修改c:\windows\system32\drivers\etc\hosts文件
添加
B站IP B站域名
这样就避免A站(数据库服务器端)不再反查DNS,刷新页面,快了N倍,呵呵,如果按2楼的方法修改,是一劳永逸的,适合有很多站需要远程访问,比如卖空间的,但是有弊端,就是以后就不能再使用主机名连接MYSQL了,具体介绍看2楼
=========================================
法二:
服务器放在局域网内进行测试时,数据库的访问速度还是很快。但当服务器放到外网后,数据库的访问速度就变得非常慢。后来在网上发现解决方法,my.cnf里面添加[mysqld]
skip-name-resolve 这样速度就快了!skip-name-resolve 选项就能禁用DNS解析,连接速度会快很多。不过,这样的话就不能在MySQL的授权表中使用主机名了而只能用ip格式。还有权限的问题,当用户设置限制只能访问某个数据库,如果这个数据库被删了,再重建这个指定数据库,限制用户还是不能访问这个数据,大概是删除数据库的时间,把该用户的访问权限也级联删除了,详细可以查看mysql.db的记录若使用–skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用 mysqladmin flush-privileges或mysqladmin reload来开启访问控制;默认情况是show databases语句对所有用户开放。如果mysql服务器没有开远程帐户,就在my.cnf里面加上skip-grant-tables排除网络问题。就MySQL本身而言,问题出在在mysql dns反解析mysql>show processlist;| 20681949 | unauthenticated user | 10.10.4.193:52497 | NULL | Connect | | Reading from net | NULL |
| 20681948 | unauthenticated user | 10.10.4.193:52495 | NULL | Connect | | Reading from net | NULL 发现有非常多的 unauthenticated user 尝试做登入使用 mysql 的情況 ,当这种情况无限制发生时就会造成系统十分缓慢。查 阅mysql官方网站得知,这属于官方一个系统上的特殊设定,就把他当成mysql的一个bug算了,不管链接的的方式是经过 hosts 或是 IP 的模式,他都会对 DNS 做反查。mysqld 会尝试去反查 IP -> dns ,由于反查解析过慢,就会无法应付过量的查询。解决办法:/usr/local/mysql/bin/mysqld_safe –skip-name-resolve –user=mysql&加 –skip-name-resolve 这么一个参数就可以,关闭mysql的dns反查功能。或者修改mysql配置文件。编辑/etc/my.cnf在[mysqld]段中加入skip-name-resolve重启mysql在/etc/my.cnf 的配置文件中加入如下一句,禁用DNS反响解析,就能大大加快MySQL连接的速度。
[mysqld]下面加上这句
skip-name-resolve# 注意有些文章中写道加入–skip-name-resolve,经验证,在CentOS5下加入–skip-name-resolve会导致mysql守 护进程无法启动。估计在其他linux系统下是一样的,windows下没有测试,skip-name-resolve应该就可以。
3. 增大HOST_CACHE_SIZE的值,HOST_CACHE_SIZE的默认值是128 适合多个远程主机
MySQL解析DNS的流程图