Почему клиент MySQL не использует указанный мной порт? - PullRequest
0 голосов
/ 03 мая 2018

Я тестировал проблему с подключением и тестировал порт 3307, как указано в моем URL JDBC. Это сработало, поэтому я предположил, что это было в этом порту. Затем я увидел порт по умолчанию 3306 и попробовал случайные порты, и он все еще работал. Я ожидал, что это не удастся. Почему он игнорирует порт в командной строке?

$ mysql -u root --port 999 -h localhost gb
MariaDB [gb]> SHOW VARIABLES WHERE Variable_name = 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |

$ mysql --version
mysql  Ver 15.1 Distrib 10.1.30-MariaDB, for CYGWIN (i686) using  EditLine wrapper

Я тоже попробовал -P 999, и это сработало.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Как писал spencer, по умолчанию используется сокетное соединение.

Вы можете принудительно настроить TCP следующим образом:

mysql -u root -p --port=3306 --protocol=TCP
0 голосов
/ 03 мая 2018

Он игнорирует порт, потому что использует локальное соединение с сокетом, а не соединение TCP / IP. Это потому, что хост указан как localhost.

localhost имеет особое значение в MySQL. Он не разрешается до IP-адреса 127.0.0.1 (как мы могли бы ожидать, исходя из нашего знакомства с этим шаблоном.)

Поведение документировано в Справочном руководстве MySQL ...

выдержка из https://dev.mysql.com/doc/refman/5.7/en/connecting.html

В Unix программы MySQL обрабатывают имя хоста localhost особым образом, что, вероятно, отличается от того, что вы ожидаете по сравнению с другими сетевыми программами. Для подключений к localhost программы MySQL пытаются подключиться к локальному серверу с помощью файла сокета Unix. Это происходит, даже если указана опция --port или -P для указания номера порта. Чтобы убедиться, что клиент устанавливает соединение TCP / IP с локальным сервером, используйте --host или -h, чтобы указать значение имени хоста 127.0.0.1, или IP-адрес или имя локального сервера. Вы также можете указать протокол соединения явно, даже для localhost, используя параметр --protocol = TCP. Например:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...