Як перевірити, на якому порту працює MySQL і чи можна його підключити?


143

Я встановив MySQL і навіть увійшов там як користувач.

Але коли я намагаюся підключитися так:

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

Ні один не працює. Не впевнений, чи повинні обидва працювати, але принаймні один з них повинен :)

Як я можу переконатися, що порт справді 3306? Чи є команда linux, щоб якось це побачити? Також, чи є більш правильний спосіб спробувати його через URL?

Відповіді:


207

Щоб знайти слухача на порту, зробіть це:

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 the 127 ... означає слухати лише на локальному хості (не доступний зовні). 0,0.0,0 означає "всі інтерфейси", і тому (як правило) зовні видно.
Кіт

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

Слід об'єднати це з відповіддю @ bortunac, яка посилається на -pпараметр. Додавання процесу дійсно допомагає зробити цю інформацію кориснішою.
Ragaar

1
@JBeck три прапорці для Linux. TCP, слухачі, без пошуку імен. див man netstat.
Кіт


65

grep port /etc/mysql/my.cnf (принаймні, у роботах debian / ubuntu)

або

netstat -tlpn | grep mysql

перевірити

bind-address 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

Використовуйте як корінь для всіх деталей. -tОпція обмежує вихід для підключення TCP, -lдля прослуховування портів, -pсписки назви програми і -nпоказує цифрову версію порту замість іменованої версії.

Таким чином ви можете побачити ім'я процесу та порт.


1
Не працювало для мене - я отримав "tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -"
Брайан

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/uk/connector-j-reference-configuration-properties.html

ОНОВЛЕННЯ:

Я спробував перенести telnet в MySQL ( telnet ip 3306), але це не працює:

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:* LISTEN



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.