Wordpress5.0.2加载1秒以上问题mysqli_real_connect

今天由于官网要更新,打算重新来看看wordpress的模板开发,然后下载了5.0.2按照以前的配置了发现首页巨慢,加载一秒以上

由于没有代码跟踪模块,只能手动跟踪了,

终于跟踪到wp-db.php的构造函数db_connect,然后定位到了mysqli_real_connect巨慢。查看了参数,把$host改成www.test.com后发现ok了,改成ip 127.0.0.1和192.168.3.200均ok,我的hosts文件对这几个域名都做了绑定,连localhost也做了处理。那么问题可能出在mysqli_real_connect对localhost做了特殊处理?

 

 

然后直接搜索了发现别人也遇到了

https://blog.csdn.net/jlds123/article/details/38441443

上午工程师来部署应用的时候,测试远程连接mysql特别慢,但是在在数据库服务器上本地连接就特别快,经过ping和telnet测试后发现网络没有问题。经过查找资料,了解如下配置项可解决问题。

[mysqld]
skip-name-resolve
下面是有关该配置项的解释

How MySQL uses DNS

When a new thread connects to mysqld, mysqld will spawn a new thread to handle the request. This thread will first check if the hostname is in the hostname cache. If not the thread will call gethostbyaddr_r() and gethostbyname_r() to resolve the hostname.
If the operating system doesn't support the above thread-safe calls, the thread will lock a mutex and call gethostbyaddr() and gethostbyname() instead. Note that in this case no other thread can resolve other hostnames that is not in the hostname cache until the first thread is ready.
You can disable DNS host lookup by starting mysqld with –skip-name-resolve. In this case you can however only use IP names in the MySQL privilege tables.
If you have a very slow DNS and many hosts, you can get more performance by either disabling DNS lookop with –skip-name-resolve or by increasing the HOST_CACHE_SIZE define (default: 128) and recompile mysqld.
You can disable the hostname cache with –skip-host-cache. You can clear the hostname cache with FLUSH HOSTS or mysqladmin flush-hosts.
If you don't want to allow connections over TCP/IP, you can do this by starting mysqld with –skip-networking.

大概意思是当一个新的请求到达mysql服务时,mysql服务会派生一个子进程来处理这个请求的全部事宜。这个子进程首先会检查发来请求的主机名是否在缓存中,如果不存在则会进程DNS解析来查找主机名。

可以通过在mysqld标签下skip-name-resolve禁用DNS解析。

注意:在mysql配置文件中禁止DNS解析后,mysql库中user表中的host字段不能使用域名。
--------------------- 
作者:jlds123 
来源:CSDN 
原文:https://blog.csdn.net/jlds123/article/details/38441443 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

localhost没在缓存中?

不懂 

仔细查看了一下

https://blog.csdn.net/adi_1987/article/details/53464601

这个同学写得非常详细

使用 localhost 无法连接 MySQL 数据库的解决方案

 

Tip:这几天在研究LAMP/WAMP及discuz的时候却发觉在装mysql及php的时候,用php连接mysql的时候死活连不上,我的代码如下:

<?php

   $conn=mysql_connect("localhost","root","5015557");//不能连接上

 // $conn=mysql_connect("127.0.0.1","root","5015557");//能连接上

 

   if($conn)

    {

     echo "success";

}

   else

   {

    echo "failed";

   }

?>

研究发现,用localhost连接的时候死活连不上(提示超时,曾经一度想要修改mysql的连接超时时间),而改用127.0.0.1连接的时候却轻松的连接上了后来才发现原来是IPV6的问题。

phpMyAdmin 是用 PHP 编写的基于 Web 的,最出色的 MySQL 数据库图形用户界面管理平台之一,通过它可以方便的对数据库进行操作,例如建立、复制、删除数据等等,输却无需逐字逐句地输入 SQL 命令。phpMyAdmin 的使用不是本文的重点,在作者刚刚接触这个软件时,配置是一个大问题(事实上对于很多初学者甚至熟练的程序员都一样),本文主要解决 Windows Vista 和 Windows 7 等平台下 phpMyAdmin 的连接问题。

在保证其它配置都完全正确的前提下,我发现自己的"服务器"(Windows 7 32bit)始终无法正确连接到 MySQL 服务器。在网上搜索问题时发现有不少站长也遇到了同样的困惑,但却找不到解决方案。情况类似,无法使用"localhost"连接到 MySQL 服务器,而用 127.0.0.1 却可以。起初作者也弄不明白这是为什么,几乎绝大部分的网络教材都把 localhost 等同于 127.0.0.1 本地回环地址。而事实上是的,只是在 WinVista 及 Win7 下,localhost 有着另外一个更高层次的含义。

在 Win7 命令提示符(CMD)下 Ping localhost 有如下结果:

正在 Ping WinSeven-PC [::1] 具有 32 字节的数据:
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms
来自 ::1 的回复: 时间<1ms

::1 的 Ping 统计信息: 
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位): 
最短 = 0ms,最长 = 0ms,平均 = 0ms

从上面可以清楚地看出环回没有问题,可是为什么 Ping localhost 回复地址却是"::1","::1"是什么东西?

原来自从 WinVista 开始,Windows 系统就默认开启了 IPv6 协议,而这个"::1"正是 IPv6 的环回地址(00:00:00:00:00:00:00:01 的压缩形式),但是 MySQL的常规版本并不支持通过 IPv6 连接,这该如何解决,难道要关闭 IPv6 协议吗?这是一种解决方法,不过也可以通过修改 host 来解决。

从 WinVista 和 Win7 的 hosts 文件里可以看出,localhost 并没有直接被解析为 127.0.0.1 ,而是 DNS 将根据当前连接的协议来自动选择将其解析为 v4 地址还是 v6 地址:

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost

而在此我们为了解决 localhost 的连接问题,可以给 host 加上这么一条,以告诉系统强制使用 IPv4 连接。直接在 hosts 文件的末尾加上

127.0.0.1 localhost

这一条语句(需要修改文件权限)。再次 Ping 一下 localhost:

正在 Ping WinSeven-PC [127.0.0.1] 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128
127.0.0.1 的 Ping 统计信息:

数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失)
往返行程的估计时间(以毫秒为单位): 
最短 = 0ms,最长 = 0 ms,平均 = 0ms

可以看出 localhost 已经被强制解析为 IPv4 的环回地址。觉得繁琐的网友,可以直接使用 127.0.0.1 替换 localhost 来连接,效果都是一样的,在性能上可能有所差异。另外最新版本的 phpMyAdmin 已经提供了图形界面的配置文件自动生成及下载功能,默认位于 phpMyAdmin/Setup/ 目录下,根据提示要求进行相应设置,然后将 config.inc.php 文件下载并放到 phpMyAdmin 根目录即可。
--------------------- 
作者:adi_1987 
来源:CSDN 
原文:https://blog.csdn.net/adi_1987/article/details/53464601 
版权声明:本文为博主原创文章,转载请附上博文链接!

问题找到了,我的测试环境是win7,hosts开启了::1指向localhost,那么只需要注释掉就好了。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值