почему mySQL подключается через любой / все порты - PullRequest
8 голосов
/ 09 декабря 2010

Я использую Linux Mint и пытаюсь подключиться к mySQL таким образом

mysql --port=3306 -u root -p

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

mysql --port=1234 -u root -p

Если это не сбоит, поскольку на порту 1234 не работает сервер mySQL?

Причина, по которой яЯ спрашиваю, это потому, что я хочу создать туннель SSH для подключения к базе данных на другом сервере.Допустим, туннель SSH перенаправит весь мой трафик с localhost: 3308 на myremoteserver: 3306.Так как мой локальный сервер MySQL принимает мои подключения на все порты, я не могу подключиться к порту 3308 и подключиться к удаленному серверу.Я все еще бью свой локальный сервер ....

Даже если мои параметры туннеля SSH могли быть неправильными, мне было интересно, знает ли кто-нибудь, почему я могу подключиться к порту 1234, и он все еще поражает мой локальный сервер MySQL, работающийна 3306?

Ответы [ 4 ]

11 голосов
/ 27 сентября 2012

Для принудительного установления соединения TCP используйте --protocol=TCP.

Пример:

Сначала SSH-туннель

ssh -L 4000:localhost:3306 server.ch

, а затем подключитесь кудаленный сервер MySQL с

mysql -h localhost --port=4000 --protocol=TCP -u root -p
10 голосов
/ 09 декабря 2010

IIRC mysql соединяет вас с сокетом Unix, если вы подключаетесь к localhost. Поскольку в этом случае он не соединяет вас через TCP, порт не задействован, а номер порта, который вы указываете, не имеет значения.

Редактировать: Не уверен, что это верно для всех систем, но если я использую 127.0.0.1 или имя хоста вместо localhost, mysql подключается через TCP, и номер порта имеет значение - я могу подключиться только с правильным номером порта.

1 голос
/ 23 июня 2014

@ titanoboa, спасибо за это! У меня была такая же проблема. Просто добавьте, что на самом деле вы можете принудительно установить TCP-соединение даже для localhost, используя следующую команду:

[client]
port = 3306 
socket = /var/run/mysqld/mysqld.sock 
protocol = TCP

Приветствия

1 голос
/ 09 декабря 2010

Он запросит у вас пароль , прежде чем попытается подключиться. Если вы введете свой пароль (или что-то еще) и дадите ему возможность продолжить, он ответит примерно так:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock'
...