Когда использовать сокет MySQL, а когда использовать порт host:?

19

Многие приложения позволяют мне подключаться к Mysql, используя имя пользователя, пароль хоста и порт. Некоторые позволяют мне настроить сокет вместо host:port.

Есть ли явное преимущество одного над другим? Я могу представить, что сокет работает только тогда, когда MySQL находится на той же машине. Это так? И если так, есть ли преимущества по сравнению с использованием этого сокета вместо подключения localhost:3306?

Я не слишком знаком с входами и выходами сетей и сокетов, так что, возможно, я полностью упускаю некоторую важную информацию, и мой вопрос просто глупый; Если да, не могли бы вы объяснить, чего мне не хватает?

Беркеш
источник

Ответы:

19

Ну, это просто.

Сокет - это файловая связь, и вы не можете получить доступ к сокету с другого компьютера.

С другой стороны, порты открыты для мира (зависит от конфигурации), и вы можете получить доступ к mysql с другой машины, используя комбинацию хост + порт.

Кроме того, насколько я понимаю, сокеты - это просто комбинация хост + порт, просто в формате файла. Таким образом, я не вижу какой-либо явной выгоды в использовании любого из них (насколько я знаю).

Хотя я лично предпочитаю использовать хост + порт, так как мой код становится более гибким, так как я могу перенести его на другую машину, не меняя сильно.

Скопируйте вставку из какого-нибудь старого поста :

Unix-сокеты немного быстрее, так как у вас нет накладных расходов tcp. Если вы понимаете, что потеря производительности - это вопрос загрузки сервера. Если у вас не очень высокая нагрузка на сервер, вы ее не узнаете.

Если вы используете Jails (FreeBSD) или какую-либо другую технологию виртуализации для отделения, например, MySQL-сервера от веб-сервера, вы часто используете установку tcp / ip вместо сокетов. Правила брандмауэра должны ограничивать доступ, хотя.

Вам нужно выяснить, находится ли ваша система под большой нагрузкой, чтобы был необходим сокет, или вы можете сосредоточиться на хорошем дизайне системы (разделение служб), тогда решение tcp / ip будет лучше.

Поэтому сделайте длинный ответ коротким:

Да, разница в производительности есть, сокеты быстрее. Если вы не страдаете высокой нагрузкой на сервер, просто выберите то, что лучше соответствует дизайну вашей системы.

GeekRide
источник
Но когда у меня есть оба, когда mysqld живет на той же машине, что и клиент; Есть ли различия в использовании одного над другим? Один легче, более производительный, подвержен ошибкам или что-то другое?
Беркес
Просто обновил ответ с дополнительной информацией.
GeekRide
И еще немного информации.
GeekRide