localhost vs. 127.0.0.1 in mysql_connect()

PhpMysql

Php Problem Overview


  1. Does using localhost in mysql_connect() make the connection faster than using 127.0.0.1?
  2. What is the connection type between the PHP script and mySQL (when using the mysql_connect() function) ? Is it TCP/IP?

Php Solutions


Solution 1 - Php

  1. Differs between Windows and Linux. If you use a unix domain socket it'll be slightly faster than using TCP/IP (because of the less overhead you have).
  2. Windows is using TCP/IP as a default, whereas Linux tries to use a Unix Domain Socket if you choose localhost and TCP/IP if you take 127.0.0.1.

Solution 2 - Php

"localhost" means local socket connection while 127.0.0.1 is TCP/IP. And yes, sockets are faster than TCP/IP.

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

> Whenever you specify "localhost" or "localhost:port" as server, the MySQL client library will override this and try to connect to a local socket (named pipe on Windows). If you want to use TCP/IP, use "127.0.0.1" instead of "localhost". If the MySQL client library tries to connect to the wrong local socket, you should set the correct path as in your PHP configuration and leave the server field blank.

Solution 3 - Php

Nope, the 127.0.0.1 is recommended to use , because Windows 7 has a problem with choosing between IPv6 & IPv4. I tried this and if I used localhost, the page has reloading about 1sec (1,04sec) and when i used 127.0.0.1, the page has reloading 50ms. Both were used under Windows 7.
In Windows XP it doesn´t make difference.

Solution 4 - Php

For Unix, add to the client block after [client] in /etc/mysql/my.cnf this line :

protocol=tcp

Solution 5 - Php

Php site says:

Note:

> Whenever you specify "localhost" or > "localhost:port" as server, the MySQL > client library will override this and > try to connect to a local socket > (named pipe on Windows). If you want > to use TCP/IP, use "127.0.0.1" instead > of "localhost". If the MySQL client > library tries to connect to the wrong > local socket, you should set the > correct path as in your PHP > configuration and leave the server > field blank.

I guess the speed difference would be too low that it's something you should'nt be worried about.

Solution 6 - Php

For macs, here's the solution:

Connect to MySQL using localhost instead of 127.0.0.1 on a MAC. For a long while now I’ve been connecting to MySQL on my development platform with 127.0.0.1 because for some reason localhost didn’t work. Turns out it’s because 127.0.0.1 uses TCP/IP and localhost uses sockets. The php.ini file points to the wrong place for the mysql.sock so all you have to do is change it, restart apache and voila!

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

Note: If you don’t have a php.ini file, you need to copy the provided default called 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/

Solution 7 - Php

It is not true that localhost is faster, but is rather a bit slower.

That being said, if you are connecting to someone else; catch my drift?

Who is to say which side of the connection fails harder? No one. That:

127.0.0.1 is a faster ping than localhost. Try on any Terminal.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJoelView Question on Stackoverflow
Solution 1 - PhphalfdanView Answer on Stackoverflow
Solution 2 - PhpPiotr PankowskiView Answer on Stackoverflow
Solution 3 - PhpVasekdvorView Answer on Stackoverflow
Solution 4 - PhpIgaelView Answer on Stackoverflow
Solution 5 - PhpSinanView Answer on Stackoverflow
Solution 6 - PhpGujaminView Answer on Stackoverflow
Solution 7 - Php0b00000001View Answer on Stackoverflow