Как проверить, на каком порту работает MySQL и можно ли к нему подключиться?


144

Я установил MySQL и даже вошел в систему как пользователь.

Но когда я пытаюсь подключиться вот так:

http://localhost:3306
mysql://localhost:3306

Ни то, ни другое не работает. Не уверен, что оба должны работать, но хотя бы один из них должен :)

Как я могу убедиться, что это действительно порт 3306? Есть ли команда linux, чтобы как-нибудь это увидеть? Кроме того, есть ли более правильный способ попробовать это через URL-адрес?

Ответы:


210

Чтобы найти слушателя порта, сделайте следующее:

netstat -tln

Вы должны увидеть такую ​​строку, если mysql действительно прослушивает этот порт.

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

Порт 3306 является портом MySql по умолчанию.

Для подключения вам просто нужно использовать любой клиент, который вам нужен, например, базовый клиент mysql.

mysql -h localhost -u база данных пользователей

Или URL-адрес, который интерпретируется кодом вашей библиотеки.


2
Что это значит, когда вместо 127.0.0.1:3306 написано 0.0.0.0:3306?
mbmast

1
@mbmast 127 ... означает прослушивание только на локальном хосте (недоступном извне). 0.0.0.0 означает «все интерфейсы» и поэтому (обычно) внешне виден.
Кит

Я думал, что это должен быть внешний вид, это должен быть собственный IP-адрес машины, а 0.0.0.0 означает, что служба недоступна из любого места. Я что не так? У меня есть сервер, на котором запущен MySQL, брандмауэр имеет 3306 открытых с любого IP-адреса, но MySQL отказывается устанавливать соединение, я подумал, потому что в настоящее время MySQL прослушивает 0.0.0.0.
mbmast

Следует объединить это с ответом @bortunac, который ссылается на -pпараметр. Добавление процесса (ов) действительно помогает сделать эту информацию более полезной.
Ragaar 05

1
@JBeck три флага для Linux. TCP, слушатели, без поиска имени. см man netstat.
Кейт


65

grep port /etc/mysql/my.cnf (по крайней мере, в debian / ubuntu работает)

или

netstat -tlpn | grep mysql

проверить

адрес привязки 127.0.0.1

в /etc/mysql/my.cnf, чтобы увидеть возможные ограничения


32
netstat -tlpn

Он покажет список примерно так:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1393/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1859/master
tcp        0      0 123.189.192.64:7654     0.0.0.0:*               LISTEN      2463/monit
tcp        0      0 127.0.0.1:24135         0.0.0.0:*               LISTEN      21450/memcached
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      16781/mysqld

Используйте как root для всех деталей. Эта -tопция ограничивает вывод TCP-соединениями, -lдля прослушивающих портов, -pперечисляет имя программы и -nпоказывает числовую версию порта вместо названной версии.

Таким образом вы можете увидеть имя процесса и порт.


2
У меня не сработало - я получил "tcp 0 0 127.0.0.1:3306 0.0.0.0:* СЛУШАТЬ -"
Брайан

7

Попробуйте использовать только опцию -e( --execute):

$ mysql -u root -proot -e "SHOW GLOBAL VARIABLES LIKE 'PORT';"                                                                                                       (8s 26ms)
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+

Замените rootна ваше "имя пользователя" и "пароль"


6

Оба URL-адреса неверны - должно быть

jdbc:mysql://host:port/database

Я думал, что это само собой разумеется, но для подключения к базе данных с помощью Java требуется драйвер JDBC. Вам понадобится драйвер MySQL JDBC .

Возможно, вы сможете подключиться через сокет через TCP / IP. Ознакомьтесь с документацией MySQL .

См. Http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

ОБНОВИТЬ:

Я попытался подключиться к MySQL ( telnet ip 3306) по telnet , но ничего не вышло:

http://lists.mysql.com/win32/253

Я думаю, это то, что вы имели в виду.


Кажется, не работает, когда я пробовал это в своем коде :( Также, когда я вставлял его в браузер, Firefox сказал, что не может открыть такую ​​вещь. Где / как я могу это попробовать? - Спасибо!
GeekedOut

Ага, в браузере его не открыть. Вам понадобится драйвер MySQL JDBC и код Java.
duffymo

3
это только если вы используете Java.
Кит

Я пытаюсь настроить его с помощью Ruby on Rails через файл database.yml. Но мне действительно нужен был номер порта.
GeekedOut

Это не совсем ответ на вопрос.
AStopher

6

Для некоторых более простой подход: если вы просто хотите проверить, подключен ли MySQL к определенному порту, вы можете использовать следующую команду в терминале. Проверено на Mac. 3306 - порт по умолчанию.

mysql --host=127.0.0.1 --port=3306

Если вы успешно войдете в терминал оболочки MySQL, все в порядке! Это результат, который я получаю при успешном входе в систему.

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9559
Server version: 5.6.21 Homebrew

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

5

3306 - порт по умолчанию для mysql. Проверьте это с помощью:

netstat -nl|grep 3306

он должен дать такой результат:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* СЛУШАТЬ



3

Для меня ответ @joseluisq дал:

ОШИБКА 1045 (28000): доступ запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: НЕТ)

Но это сработало так:

$ mysql -u root@localhost  -e "SHOW GLOBAL VARIABLES LIKE 'PORT';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+

3

В Mac OS X есть два варианта. netstatилиlsof

Использование netstatне будет отображать процесс в Mac OS X. поэтому с помощью netstat вы можете выполнять поиск только по порту.
Использование lsofпокажет имя процесса.

Я сделал следующее, когда столкнулся с конфликтами портов (контейнеры докеров):

netstat -aln | grep 3306

Выходы: tcp46 0 0 *.3306 *.* LISTEN

sudo lsof -i -P | grep -i "LISTEN" | grep -i 3306

Выходы: mysqld 60608 _mysql 31u IPv6 0x2ebc4b8d88d9ec6b 0t0 TCP *:3306 (LISTEN)


2

Если вы находитесь в системе, netstatкоторая недоступна (например, RHEL 7 и более поздние выпуски Debian), вы можете использовать ss, как показано ниже:

sudo ss -tlpn | grep mysql

На выходе вы получите что-то вроде следующего:

LISTEN     0      50        *:3306        *:*        users:(("mysqld",pid=5307,fd=14))

Четвертый столбец - Local Address:Port. Итак, в этом случае Mysql прослушивает порт 3306 по умолчанию.


1

Я согласен с решением @bortunac. my.conf специфичен для mysql, а netstat предоставит вам все прослушиваемые порты.

Возможно, используйте оба: один для подтверждения того, какой порт установлен для mysql, а другой - для проверки того, что система прослушивает этот порт.

Мой клиент использует CentOS 6.6, и я нашел файл my.conf в / etc /, поэтому использовал:

grep port /etc/my.conf (CentOS 6.6)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.