Я хотел бы проанализировать mysql
трафик. Прямо сейчас все запросы mysql отправляются в Unix-сокет MySQL:
unix 2 [ ACC ] STREAM LISTENING 3734388 15304/mysqld /var/run/mysqld/mysqld.sock
Я пытаюсь отключить этот сокет, чтобы заставить MySQL использовать сетевой сокет вместо обратной связи. Я попытался закомментировать все socket
директивы в my.cnf
и debian.cnf
файлы и перезапустить MySQL , но это не имеет никакого значения.
Как я могу отключить MySQL Unix сокет, чтобы заставить MySQL по сети?
дополнительная информация: я бегу MySQL 5.1
дальше ubuntu 10.04
.
Точность в вопросе
Поскольку многие люди предлагали включить сетевой сокет, я хотел бы прояснить свой вопрос, указав, что адрес привязки уже включен bind-address = 127.0.0.1
и что доступно прослушивающее соединение:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 15601/mysqld
Тем не менее, я не вижу попыток подключения 127.0.0.1:3306
из моего веб-приложения (веб-сайт Drupal).
Обновлено с ответом
Похоже, что проблема действительно в mysqli
соединителе, который использует Drupal ( .ht_config.php
для тех, кто заинтересован). Оно было установлено: mysqli://drupal:***@localhost/drupal
, изменения localhost
в 127.0.0.1
фиксированный выпуск (т.е. Drupal теперь делает соединение с сетевой розеткой).
--protocol
.. см. Ответ Джонатана.В Linux и других * nixes MySQL предполагает, что вы хотите использовать сокет, если вы подключаетесь к хосту «localhost» (который будет именем хоста по умолчанию).
Вы можете переопределить это тремя способами: 1) Укажите другое имя хоста, например, 127.0.0.1 (
mysql -h 127.0.0.1
) или реальное имя хоста вашего сервера. 2) Укажите, что вы хотите использовать TCP, а не сокет (mysql --protocol tcp
).Вы также можете легко сделать так, чтобы по умолчанию я редактировал ваш my.cnf, чтобы он имел это ([клиент] означает любой клиент:
Вы можете увидеть полное описание того, как MySQL решает, как подключиться здесь:
http://dev.mysql.com/doc/refman/5.5/en/connecting.html
источник
Разве это не проблема клиента? При использовании программы mysql Вы можете использовать
--protocol
переключатель. Со страницы руководстваЯ только что попробовал
в то время как мониторинг порта 3306 с,
tcpdump -i lo tcp port 3306
и я могу видеть трафик, тогда как, если я просто запуститьЯ (правильно) не вижу трафика на порт 3306.
РЕДАКТИРОВАТЬ:
Теперь, когда вы сообщите нам, что используете DRUPAL, решение относительно простое.
Перейти к
sites/<sitename>
илиsites/default
отредактироватьsettings.php
файлВы найдете структуру, как это
Изменение
'localhost'
в'127.0.0.1'
и сохранить файл.источник
no control
я был драматичным. Я мог бы изменить.ht_config.php
файл и исправить проблему..ht_config.php
вместоsettings.php
. Я не знаю почему (команда разработчиков попросила, чтобы это было так). Теперь проблема в том, что Drupal, похоже, читает.ht_config.php
файл при каждом запросе (потому что, если я изменю его, изменения сразу же будут учтены), что не может помочь с выступлениями. Мы будем искать способ кэширования этих настроек на уровне приложения, но это другая проблема.--protocol=socket
если у вас естьhost
запись в[client]
разделе,.my.cnf
это даетwrong or unknown protocol
ошибку. (mysql 5.7.13)Это может звучать немного сумасшедшим
Попробуйте установить для файла сокета абсолютный путь, путь которого находится на другом компьютере.
http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_socket
В противном случае вы не сможете обойти это поведение по умолчанию, поскольку для взаимодействия с mysqld должен существовать файл сокета.
источник
Отредактируйте my.cnf и добавьте директиву
или ваш предпочтительный IP-адрес, чтобы сделать его доступным по сети. Перезапустите mysql после того, как все заработало.
источник
Клиент php mysqli будет использовать файл сокета unix вместо сети tcp, когда вы передаете значение NULL или строку "localhost" ( http://www.php.net/manual/en/mysqli.construct.php ).
кажется, что клиент sqlyog всегда использует tcp сеть, даже когда вы заполняете в нем "localhost"
источник
Мне пришлось удалить /etc/my.cnf (после его резервного копирования), а затем перезапустить сервер. Тогда я мог соединиться с сокетом, и ошибка исчезла.
источник