query mysql_select_db mysql_connect funciona example php mysql performance localhost mysql-connect

mysql_select_db - php mysql query



mysql_connect(localhost/127.0.0.1) slow en la plataforma de Windows (2)

Estoy usando Windows 7, Apache 2, PHP 5, MySQL 5, todos están en la misma máquina. He encontrado un problema interesante, tengo el siguiente código:

$sql = "select * from user1"; $conn = mysql_connect("localhost", "root", "xxxxxxxx"); mysql_select_db("test1"); mysql_query("set names utf8"); $result = mysql_query($sql, $conn); while ($row = mysql_fetch_assoc($result)){ foreach ($row as $key => $value){ echo $key." => ".$value." || "; } echo "<br/>"; } mysql_free_result($result); mysql_close($conn);

El tiempo de ejecución para el código anterior es más de 1 segundo.

Cuando uso 127.0.0.1 lugar de localhost , el tiempo de ejecución es de alrededor de 10 ms.

Traté de encontrar la razón subyacente en internet, y este es el resultado:

Recientemente cambié mi desarrollo de XP a Windows 7 y descubrí que las páginas web que había desarrollado tardaban 5 segundos en cargarse. Esto era inaceptable, por supuesto, así que tuve que rastrear el problema. Eventualmente rastreé la función / método ofensivo pdo :: construct. También descubrí que mysql_connect tardaba aproximadamente 1 segundo en establecer una conexión. Después de hacer un poco de búsqueda de Google, encontré una explicación de que php tenía problemas con IPv6 y que podía solucionar el problema desactivando IPv6 o cambiando a ipaddress 127.0.0.1 al hacer la conexión.

Me pregunto cuál es el problema de IPv6 en PHP, solo quiero obtener un entendimiento más profundo. Gracias.


PHP está intentando abrir una conexión a localhost. Como su computadora está conectada a su red a través de IPv6, primero está probando la versión IPv6 de ''localhost'', que es una dirección IP de :: 1

http://en.wikipedia.org/wiki/IPv6_address#Special_addresses

:: 1/128 - La dirección loopback es una dirección de host local unicast. Si una aplicación en un host envía paquetes a esta dirección, la pila IPv6 volverá a vincular estos paquetes en la misma interfaz virtual (correspondiente a 127.0.0.0/8 en IPv4).

Parece que su servidor MySQL no está escuchando esa dirección, sino que solo está vinculada a una dirección IPv4, por lo que una vez que PHP no puede abrir la conexión, se repliega e intenta abrir localhost a través de IPv4, también conocido como 127.0.0.1

Yo personalmente prefiero usar cualquiera de las direcciones IP o usar ether el archivo de hosts de Windows o Mac equivalente para definir nombres de dominio ''falsos'' y luego usarlos cuando me conecto a MySQL, que resuelven direcciones IP. De cualquier manera, puedo saber exactamente si se usará una dirección IPv4 o IPv6.

Tanto MySQL como Apache son compatibles con IPv6, pero debe indicarles que utilicen una dirección IPv6 explícitamente. Para MySQL, consulte: http://dev.mysql.com/doc/refman/5.5/en/ipv6-server-config.html

Para la configuración de Apache, vea: http://httpd.apache.org/docs/2.2/bind.html

Apache admite múltiples direcciones IP para que pueda usar ambas a la vez, si la tarjeta de red en la máquina tiene una dirección IPv4 e IPv6. MySQL solo admite una dirección.


PHP está intentando conectarse a "localhost" en Windows 7/8/10 es :: 1, pero MySQL no está escuchando en los conectores IPv6, puede aplicar varias correcciones:

1) En su archivo de host (C: / windows / system32 / drivers / etc / host), establezca localhost en 127.0.0.1

2) En PHP, el servidor MySQL cambia de localhost a 127.0.0.1

3) En my.ini, agrega o edita: bind-address = ::

Si la dirección es ::, el servidor acepta conexiones TCP / IP en todas las interfaces IPv4 e IPv6 del host del servidor. Utilice esta dirección para permitir las conexiones IPv4 e IPv6 en todas las interfaces del servidor.

Opción sugerida si tiene MySQL> = 5.5.3