2010-09-15 19 views
43
  1. ¿Si se usa en localhostmysql_connect() hacer la conexión más rápida que usando 127.0.0.1?
  2. ¿Cuál es el tipo de conexión entre el script PHP y mySQL (cuando se usa la función mysql_connect())? ¿Es TCP/IP?

Respuesta

58
  1. Diferentes entre Windows y Linux. Si usa un socket de dominio unix, será un poco más rápido que usar TCP/IP (debido a la menor sobrecarga que tiene).
  2. Windows usa TCP/IP como valor predeterminado, mientras que Linux intenta utilizar un socket de dominio Unix si elige localhost y TCP/IP si toma 127.0.0.1.
+0

Gracias! ¿Por qué Apache no interactúa a través de TCP/IP o conexión basada en socket con PHP? – Joel

+0

Apache usa mod_php o se conecta a PHP usando TCP/IP o Socket de dominio Unix (cuando está configurado para ejecutarse a través de fastcgi). – halfdan

+6

+ lo desagradable en Linux es cuando especifica 'localhost' como host, y un puerto específico, simplemente ignora todo el puerto y usa el socket predeterminado, no algo que uno quiera cuando se ejecutan múltiples servidores en una sola máquina (de ahí el puerto diferente ...). – Wrikken

13

"localhost" significa conexión de socket local mientras que 127.0.0.1 es TCP/IP. Y sí, los enchufes son más rápidos que TCP/IP.

Cite de http://pl.php.net/mysql_connect

Siempre que especifica "localhost" o "localhost: puerto", como servidor, la biblioteca cliente de MySQL se anulará este e intente conectarse a un conector local (nombre de tubería en Windows). Si desea usar TCP/IP, use "127.0.0.1" en lugar de "localhost". Si la biblioteca del cliente MySQL intenta conectarse al socket local incorrecto, debe establecer la ruta correcta como en su configuración de PHP y dejar el campo del servidor en blanco.

+7

TCP/IP también está basado en socket. Sé lo que quieres decir, pero confundirás a la gente con eso. – halfdan

+2

Podría ser 'conexión Unix-socket' – helios

+0

Tienes razón. Cambié esto a "socket local" para aclarar. Gracias por notarlo. –

0

sitio PHP dice:

Nota:

Siempre que especifica "localhost" o "localhost: puerto", como servidor, la biblioteca cliente de MySQL anulará esto y tratar de conectarse a un socket local (named pipe en Windows). Si quiere para usar TCP/IP, use "127.0.0.1" en lugar de de "localhost". Si la biblioteca del cliente MySQL intenta conectarse al socket local incorrecto, debe establecer la ruta correcta como en su configuración de PHP y dejar en blanco el campo del servidor.

Supongo que la diferencia de velocidad sería demasiado baja y es algo que no debería preocuparle.

12

No, se recomienda el uso del 127.0.0.1, porque Windows 7 tiene un problema al elegir entre IPv6 & IPv4. Intenté esto y si utilicé localhost, la página ha recargado aproximadamente 1seg (1,04seg) y cuando usé 127.0.0.1, la página ha recargado 50ms. Ambos se usaron con Windows 7.
En Windows XP no hace la diferencia.

+0

Tenía la misma experiencia. Pasar de localhost a 127.0.0.1 disminuyó mi latencia de 1 segundo a 5 ms. ¡Gracias! –

0

Para Unix, añadir al bloque de cliente después de [client] en /etc/mysql/my.cnf esta línea:

protocol=tcp 
0

para Mac, aquí está la solución:

Conectar a MySQL usando localhost en lugar de 127.0.0.1 en un MAC.Hace mucho tiempo que me estoy conectando a MySQL en mi plataforma de desarrollo con 127.0.0.1 porque por alguna razón, localhost no funcionaba. Resulta que es porque 127.0.0.1 usa TCP/IP y localhost usa sockets. El archivo php.ini apunta al lugar incorrecto para mysql.sock, así que todo lo que tienes que hacer es cambiarlo, reiniciar apache y listo.

Open php.ini: /private/etc/php.ini 
Find the following line: mysql.default_socket = /var/mysql/mysql.sock 
Replace with: mysql.default_socket = /tmp/mysql.sock 
Restart apache: apachectl restart 

Nota: Si usted no tiene un archivo php.ini, es necesario copiar el valor predeterminado proporcionado llamada php.ini.default

sudo cp /private/etc/php.ini.default /private/etc/php.ini 

través http://madproject.com/general/connect-to-mysql-using-localhost-instead-of-127-0-0-1-on-a-mac/

Cuestiones relacionadas