2010-09-15 12 views
43
  1. L'utilizzo di localhost in mysql_connect() rende la connessione più veloce rispetto all'utilizzo di 127.0.0.1?
  2. Qual è il tipo di connessione tra lo script PHP e mySQL (quando si utilizza la funzione mysql_connect())? È TCP/IP?

risposta

58
  1. Differenza tra Windows e Linux. Se si utilizza un socket di dominio unix, sarà leggermente più veloce rispetto all'utilizzo di TCP/IP (a causa del minor overhead che si ha).
  2. Windows utilizza TCP/IP come predefinito, mentre Linux tenta di utilizzare un socket di dominio Unix se si sceglie localhost e TCP/IP se si utilizza 127.0.0.1.
+0

Grazie! Perché Apache non interagisce tramite TCP/IP o connessione basata su socket con PHP? – Joel

+0

Apache utilizza mod_php o si connette a PHP utilizzando TCP/IP o Unix Domain Socket (se configurato per l'esecuzione tramite fastcgi). – halfdan

+6

+ la cosa sgradevole in Linux è quando si specifica 'localhost' come host, e una porta specifica, ignora semplicemente l'intero bit della porta e usa il socket predefinito, non qualcosa che si vuole quando si eseguono più server su una singola macchina (da qui il porto diverso ..). – Wrikken

13

"localhost" indica la connessione socket locale mentre 127.0.0.1 è TCP/IP. E sì, i socket sono più veloci di TCP/IP.

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

Ogni volta che si specifica "localhost" o "localhost: port", come server, la libreria client di MySQL sarà sovrascrivere questo e provare a connettersi ad un socket locale (la named pipe su Windows). Se si desidera utilizzare TCP/IP, utilizzare "127.0.0.1" anziché "localhost". Se la libreria del client MySQL tenta di connettersi al socket locale sbagliato, è necessario impostare il percorso corretto come nella configurazione di PHP e lasciare il campo del server vuoto.

+7

TCP/IP è anche basato su socket. So cosa intendi, ma confonderai le persone con esso. – halfdan

+2

Potrebbe essere 'connessione socket Unix' – helios

+0

Hai ragione. Ho cambiato questo "socket locale" per chiarire. Grazie per averlo notato. –

0

sito PHP dice:

Nota:

Ogni volta che si specifica "localhost" o "localhost: port", come server, la libreria client di MySQL sovrascriverà questo e cercare di connettersi a una presa locale (named pipe su Windows). Se si desidera utilizzare per utilizzare TCP/IP, utilizzare "127.0.0.1" invece di "localhost". Se la libreria del client MySQL tenta di connettersi al socket locale errato, è necessario impostare il percorso corretto come nella configurazione PHP e lasciare vuoto il campo server .

Immagino che la differenza di velocità sia troppo bassa per cui non dovresti preoccuparti.

12

No, si consiglia di utilizzare 127.0.0.1, perché Windows 7 ha un problema con la scelta tra IPv6 & IPv4. Ho provato questo e se ho usato localhost, la pagina ha ricaricare circa 1 sec (1,04 secondi) e quando ho usato 127.0.0.1, la pagina ha ricaricato 50 ms. Entrambi sono stati utilizzati con Windows 7.
In Windows XP non fa differenza.

+0

Ho avuto la stessa esperienza. Passando da localhost a 127.0.0.1 la mia latenza è scesa da 1 secondo a 5 ms. Grazie! –

0

Per Unix, aggiungere al blocco client dopo [client] in /etc/mysql/my.cnf questa linea:

protocol=tcp 
0

per Mac, ecco la soluzione:

Connect to MySQL utilizzando localhost invece di 127.0.0.1 su un MAC.Per molto tempo ora mi sono collegato a MySQL sulla mia piattaforma di sviluppo con 127.0.0.1 perché per qualche motivo localhost non ha funzionato. È risultato che 127.0.0.1 utilizza TCP/IP e localhost utilizza socket. Il file php.ini punta al posto sbagliato per mysql.sock, quindi tutto ciò che devi fare è cambiarlo, riavviare apache e voilà!

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: se non si dispone di un file php.ini, è necessario copiare il predefinito fornito chiamato php.ini.default

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

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

Problemi correlati