2010-09-15 2 views
43
  1. ли использование localhost в mysql_connect() сделать соединение быстрее, чем при использовании 127.0.0.1?
  2. Каков тип соединения между PHP-скриптом и mySQL (при использовании функции mysql_connect())? Это TCP/IP?

ответ

58
  1. Отличается между Windows и Linux. Если вы используете сокет домена unix, он будет немного быстрее, чем использование TCP/IP (из-за меньших накладных расходов).
  2. Windows использует TCP/IP по умолчанию, тогда как Linux пытается использовать Unix Domain Socket, если вы выбираете localhost и TCP/IP, если вы принимаете 127.0.0.1.
+0

Спасибо! Почему Apache не взаимодействует через TCP/IP или соединение на основе сокетов с PHP? – Joel

+0

Apache использует mod_php или подключается к PHP с использованием TCP/IP или Unix Domain Socket (при настройке для запуска через fastcgi). – halfdan

+6

+ неприятная вещь в Linux - это когда вы указываете «localhost» как хост и определенный порт, он просто игнорирует весь бит порта и использует сокет по умолчанию, а не тот, который требуется при запуске нескольких серверов на одной машине (следовательно, другой port ..). – Wrikken

13

"localhost" означает локальное соединение сокетов, а 127.0.0.1 - TCP/IP. И да, сокеты быстрее TCP/IP.

Cite из http://pl.php.net/mysql_connect

Всякий раз, когда вы указываете «локальный» или «локальный: порт» в качестве сервера, клиент библиотеки MySQL будет переопределить и попытаться подключиться к локальному сокету (названный трубы на Windows). Если вы хотите использовать TCP/IP, используйте «127.0.0.1» вместо «localhost». Если клиентская библиотека MySQL пытается подключиться к неправильному локальному сокету, вы должны установить правильный путь, как в вашей конфигурации PHP, и оставить поле сервера пустым.

+7

TCP/IP также основан на сокетах. Я знаю, что вы имеете в виду, но вы будете путать людей с этим. – halfdan

+2

Это может быть «Unix-socket connection» – helios

+0

Вы правы. Я изменил это на «локальный сокет», чтобы уточнить. Спасибо, что заметили. –

0

Php сайт говорит:

Примечание:

Всякий раз, когда вы указываете "локальный" или "локальный: порт" в качестве сервера, клиентская библиотека MySQL будет переопределить и попытаться подключитесь к локальному сокету (именованный канал в Windows). Если вы хотите использовать для использования TCP/IP, используйте «127.0.0.1» вместо «localhost». Если библиотека MySQL MySQL пытается подключиться к локальному соку , вы должны установить правильный путь , как в вашей конфигурации PHP , и оставьте поле пустым.

Я предполагаю, что разница в скорости будет слишком низкой, и это то, о чем вы не должны беспокоиться.

12

Нет необходимости использовать 127.0.0.1, так как Windows 7 имеет проблемы с выбором между IPv6 & IPv4. Я попробовал это, и если бы я использовал localhost, страница перезагрузилась около 1сек (1,04 сек), и когда я использовал 127.0.0.1, страница перезагрузила 50 мс. Оба были использованы под Windows 7.
В Windows XP это не делает разницы.

+0

Был тот же опыт. Переход с localhost на 127.0.0.1 снизил время ожидания от 1 секунды до 5 мс. Благодаря! –

0

Для Unix, добавьте к блоку клиента после [client] в /etc/mysql/my.cnf этой линии:

protocol=tcp 
0

для Маков, вот решение:

Подключение к MySQL с помощью localhost вместо 127.0.0.1 на MAC.В течение долгого времени я подключался к MySQL на моей платформе разработки с 127.0.0.1, потому что по какой-то причине localhost не работал. Оказывается, это потому, что 127.0.0.1 использует TCP/IP, а localhost использует сокеты. Файл php.ini указывает на неправильное место для mysql.sock, поэтому все, что вам нужно сделать, это изменить его, перезапустить apache и 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 

Примечание: Если у вас нет файла php.ini, вам необходимо скопировать предоставленный по умолчанию под названием php.ini.default

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

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