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。
在局域网内连接其他机器的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。