Две вещи я проверил бы:
Во-первых, проверьте, что нет брандмауэра или чего-то на недающих отклик на ping-запрос хостах, которое ест icmp.
Во-вторых, проверьте правила маршрутизации на машинах, которые Вы не можете проверить с помощью ping-запросов, чтобы гарантировать, чтобы у них были записи маршрута, которые вернут ответы на шлюз VPN (или непосредственно или через маршрут по умолчанию, который знает, как добраться до шлюза VPN). Snoop/wireshark целевой интерфейс на недающем отклик на ping-запрос узле, чтобы гарантировать Вам видит, что запросы входят и куда ответы идут.
Используйте привязку IP к 127.0.0.1
. Это должно активировать порт прослушивания на localhost
. На стороне клиента не используйте localhost
- используйте вместо него 127.0.0.1
. Многие клиенты имеют внутренний псевдоним, который заставляет их подключаться к сокету, если вы укажете localhost
в качестве цели.
MySQL - это странно.
Разве это не проблема клиента? При использовании программы 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 '
и сохраните файл.
Это может показаться немного безумным
Попробуйте установить для файла сокета абсолютный путь, путь к которому находится на другом компьютере
http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_socket
В противном случае вы не можете обойти это поведение по умолчанию, потому что файл сокета должен существовать для mysqld для связи.
В 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 решает, как подключиться здесь:
Отредактируйте my.cnf и добавьте директиву
bind-address = 127.0.0.1
или предпочитаемый IP-адрес, чтобы сделать его доступным по сети. После этого перезапустите mysql, чтобы он заработал.
Клиент php mysqli будет использовать файл сокета unix вместо сети TCP, когда вы передадите значение NULL или строку «localhost» ( http://www.php.net/manual /en/mysqli.construct.php)
кажется, что клиент sqlyog всегда использует tcp-сеть, даже если вы указываете в ней "localhost"
Мне пришлось удалить /etc/my.cnf (после его резервного копирования), а затем перезапустить сервер. Затем я смог подключиться к розетке, и ошибка исчезла.