mysql数据库host配置使用localhost和127.0.0.1进行连接的差异浅析




mySQL数据库所在服务器IP地址,本机的话可填 localhost 或者 127.0.0.1 



通过溯源调试发现是在使用mysqli_real_connect进行数据库链接是造成的卡。那么mysql数据库host配置使用localhost和127.0.0.1进行链接有什么差异呢。我们通过一组对比测试来进行分享,测试代码还是上一篇文章中提到的代码,也就是采用mysqli_real_connect进行数据库服务器连接。代码如下:


  1. <?php

  2. $t1=microtime(true);

  3. $h=mysqli_init();

  4. $r</span><span class="pun" style="margin:0px;border:0px;padding:0px;vertical-align:baseline;list-style:none;color:#f8f8f2;outline:none;">=</span><span class="pln" style="margin:0px;border:0px;padding:0px;vertical-align:baseline;list-style:none;color:#66d9ef;outline:none;">mysqli_real_connect</span><span class="pun" style="margin:0px;border:0px;padding:0px;vertical-align:baseline;list-style:none;color:#f8f8f2;outline:none;">(</span><span class="pln" style="margin:0px;border:0px;padding:0px;vertical-align:baseline;list-style:none;color:#66d9ef;outline:none;"> $h, 'localhost', 'root', 'password', null, '3306' );

  5. var_dump($r);

  6. $t2=microtime(true);

  7. var_dump($t2</span><span class="pun" style="margin:0px;border:0px;padding:0px;vertical-align:baseline;list-style:none;color:#f8f8f2;outline:none;">-</span><span class="pln" style="margin:0px;border:0px;padding:0px;vertical-align:baseline;list-style:none;color:#66d9ef;outline:none;">$t1);


分别分为六组进行测试,分别是linux(localhost)、linux(127.0.0.1)、linux(localhost,删除hosts配置映射)、windows(localhost)、windows(127.0.0.1)、windows(localhost,删除hosts配置映射)。

场景 消耗时长
linux(localhost) 1.8ms
linux(127.0.0.1) 2.8ms
linux(localhost,删除hosts配置) 1.8ms
windows(localhost) 20ms
windows(127.0.0.1) 30ms
windows(localhost,删除hosts配置) 1025ms

需要注意的是,每次计算得到的时间不完全一样,在linux上基本上在几毫秒内(大多数是2ms左右),而在windows上每次测试时间浮动较大,基本上是10-100ms之间(大多数在20-30ms之间)。但是在windows中,修改host删除127.0.0.1 localhost配置后,所花的时间明显增大。


因此,在linux中无论是使用localhost还是127.0.0.1 ,进行数据库连接所花费的时间并没有明显的差别,在感官上是完全感受不到差别的。但在windows上,使用localhost连接,且host中没有127.0.0.1 localhost时,连接所需要时间占到整个请求的绝大部分时长,会非常明显的感觉到卡。


比如如下图是在本地服务器测试windows上使用localhost,且删除hosts配置,网络请求计时情况。而连接所需要的时间就需要1.025秒,其他的网络开销等时间仅仅占绝少数部分。


因此,当项目迁移后请求响应时间明显比原来长,而且排除代码逻辑错误后,不妨考虑是否是由于localhost和127.0.0.1造成的差异问题。




标签: none

添加新评论