Как вынудить MySQL соединиться TCP вместо сокета Unix?

Две вещи я проверил бы:

Во-первых, проверьте, что нет брандмауэра или чего-то на недающих отклик на ping-запрос хостах, которое ест icmp.

Во-вторых, проверьте правила маршрутизации на машинах, которые Вы не можете проверить с помощью ping-запросов, чтобы гарантировать, чтобы у них были записи маршрута, которые вернут ответы на шлюз VPN (или непосредственно или через маршрут по умолчанию, который знает, как добраться до шлюза VPN). Snoop/wireshark целевой интерфейс на недающем отклик на ping-запрос узле, чтобы гарантировать Вам видит, что запросы входят и куда ответы идут.

46
задан 6 December 2011 в 13:08
7 ответов

Используйте привязку IP к 127.0.0.1 . Это должно активировать порт прослушивания на localhost . На стороне клиента не используйте localhost - используйте вместо него 127.0.0.1 . Многие клиенты имеют внутренний псевдоним, который заставляет их подключаться к сокету, если вы укажете localhost в качестве цели.

MySQL - это странно.

52
ответ дан 28 November 2019 в 19:39

Разве это не проблема клиента? При использовании программы mysql можно использовать переключатель - протокол . На странице руководства

 --protocol={TCP|SOCKET|PIPE|MEMORY}

       The connection protocol to use for connecting to the server. It is
       useful when the other connection parameters normally would cause a
       protocol to be used other than the one you want. For details on the
       allowable values, see Section 4.2.2, “Connecting to the MySQL
       Server”.

я только что попробовал

mysql --protocol=TCP -u root -p

, отслеживая порт 3306 с помощью tcpdump -i lo tcp port 3306 , и я могу видеть трафик, тогда как если я просто запускаю

mysql  -u root -p

, я (правильно) не вижу трафик на порт 3306.

РЕДАКТИРОВАТЬ:

Теперь, когда вы сообщили нам, что используете DRUPAL, решение относительно простое.

Перейдите на sites / или sites / default и отредактируйте файл settings.php

. Вы найдете подобную структуру

$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'databasename',
      'username' => 'databaseuser',
      'password' => 'databasepassword',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

Измените 'localhost' на '127.0.0.1 ' и сохраните файл.

16
ответ дан 28 November 2019 в 19:39

Это может показаться немного безумным

Попробуйте установить для файла сокета абсолютный путь, путь к которому находится на другом компьютере

http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_socket

В противном случае вы не можете обойти это поведение по умолчанию, потому что файл сокета должен существовать для mysqld для связи.

1
ответ дан 28 November 2019 в 19:39

В Linux и других * nix-версиях MySQL предполагает, что вы хотите использовать сокет, если вы подключаетесь к хосту «localhost» (который будет именем хоста по умолчанию).

Вы можете переопределить это тремя способами: 1) Укажите другое имя хоста, например 127.0.0.1 ( mysql -h 127.0.0.1 ) или настоящее имя хоста вашего сервера. 2) Укажите, что вы хотите использовать TCP, а не сокет ( mysql --protocol tcp )

Вы также можете легко сделать это по умолчанию, редактируя ваш my.cnf, чтобы он имел это ([client ] означает любой клиент:

[client]
protocol=tcp

Вы можете увидеть полное описание того, как MySQL решает, как подключиться здесь:

http://dev.mysql.com/doc/refman/5.5/en/connecting.html

77
ответ дан 28 November 2019 в 19:39

Отредактируйте my.cnf и добавьте директиву

bind-address = 127.0.0.1

или предпочитаемый IP-адрес, чтобы сделать его доступным по сети. После этого перезапустите mysql, чтобы он заработал.

1
ответ дан 28 November 2019 в 19:39

Клиент php mysqli будет использовать файл сокета unix вместо сети TCP, когда вы передадите значение NULL или строку «localhost» ( http://www.php.net/manual /en/mysqli.construct.php)

кажется, что клиент sqlyog всегда использует tcp-сеть, даже если вы указываете в ней "localhost"

1
ответ дан 28 November 2019 в 19:39

Мне пришлось удалить /etc/my.cnf (после его резервного копирования), а затем перезапустить сервер. Затем я смог подключиться к розетке, и ошибка исчезла.

0
ответ дан 28 November 2019 в 19:39

Теги

Похожие вопросы