远程连接mysql速度慢的解决方法

      PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的 MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS系统下)或MY.CNF(UNIX或LINUX系统下)文件的[mysqld]下加入 skip-name-resolve这一句。

在局域网内连接其他机器的MYSQL,发现速度慢的很,不知道什么原因,总有几秒的延迟.
后来在网上发现解决方法,my.cnf里面添加
[mysqld]
skip-name-resolve
skip-grant-tables

这样速度就快了!

skip-name-resolve
选项就能禁用DNS解析,连接速度会快很多。不过,这样的话就不能在MySQL的授权表中使用主机名了而只能用ip格式。

若使用–skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用 mysqladmin flush-privil......

/

默认配置下的MySQL在接受远程访问时会有一些延迟,这通常是因为主机名解析引起的。可以通过加一个--skip-name-resolve 参数解决此问题。在Windows环境下,可以在 mysql.ini 文件里的[mysqld]部分添加 skip-name-resolve 后重启MySQL服务。在Unix环境下则需要添加 --skip-name-resolve 参数重新编译MySQL。

下面是 MySQL 官方文档中关于MySQL如何使用DNS的说明(由Fanbin翻译):


How MySQL Uses DNS

当一个新的客户端连接到mysqld时,mysqld会产生一个新的线程来处理这个请求。这个线程首先会检查主机名是否在缓存中存在,如果不存在,它将尝试解析这个主机名。

如果操作系统支持线程安全的gethostbyaddr_r() 和gethostbyname_r() 调用,这个线程会使用它们执行主机名解析。

如果操作系统不支持线程安全的调用,这个线程就会锁定一个互斥体并换为调用gethostbyaddr() 和gethostbyname() 。在这种情况下,第一个线程解锁互斥体之前,其他的线程将不能解析在缓存中不存在的主机名。

你可以通过添加--skip-name-resolve参数启动mysqld来禁用 DNS 主机名查询。但是这将导致你在MySQL的授权表中只能使用IP数字。

如果你使用一个很慢的DNS和许多主机,你可以通过添加--skip-name-resolve禁用域名查询或通过增加 HOST_CACHE_SIZE 定义的值(默认值: 128)并重新编译mysqld来提升性能。

你可以通过--skip-host-cache参数禁用主机名缓存。要清空主机名缓存,可以执行一个 FLUSH HOSTS 语句或执行mysqladmin中的flush-hosts命令实现。

要完全禁用ICP/IP连接,请添加 --skip-networking 启动mysqld。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值