#mysql #linux #ubuntu
#mysql #linux #ubuntu
Вопрос:
Я установил MySQL и даже вошел в систему там как пользователь.
Но когда я пытаюсь подключиться вот так:
http://localhost:3306
mysql://localhost:3306
Ни то, ни другое не работает. Не уверен, что оба должны работать, но по крайней мере один из них должен 🙂
Как я могу убедиться, что порт действительно 3306? Есть ли команда Linux, чтобы как-то это увидеть? Кроме того, есть ли более правильный способ попробовать это через URL?
Ответ №1:
Чтобы найти прослушиватель на порту, сделайте это:
netstat -tln
Вы должны увидеть строку, которая выглядит следующим образом, если mysql действительно прослушивает этот порт.
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
Порт 3306 является портом MySQL по умолчанию.
Для подключения вам просто нужно использовать любой клиент, который вам требуется, например, базовый клиент mysql.
mysql -h localhost -база данных пользователя u
Или URL, который интерпретируется вашим библиотечным кодом.
Комментарии:
1. Что это значит, когда вместо 127.0.0.1:3306 написано 0.0.0.0:3306?
2. @mbmast the 127… означает прослушивание только на локальном хосте (недоступном извне). 0.0.0.0 означает «все интерфейсы» и, следовательно, (обычно) виден извне.
3. Я думал, что для внешнего отображения это должен быть собственный IP-адрес компьютера, и что 0.0.0.0 означает, что сервис недоступен ниоткуда. Я что-то не так понимаю? У меня есть окно под управлением MySQL, брандмауэр имеет 3306 открытых с любого IP-адреса, но MySQL отказывается от подключения, я думал, потому что в настоящее время MySQL прослушивает 0.0.0.0.
4. Следует объединить это с ответом @boortunac, который ссылается на
-p
параметр. Добавление процесса (ов) действительно помогает сделать эту информацию более полезной.5. @JBeck три флага, для Linux. TCP, прослушиватели, без поиска имени. смотрите
man netstat
.
Ответ №2:
Использование клиента Mysql:
mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
Комментарии:
1. ОШИБКА 1146 (42S02): таблица ‘performance_schema.global_variables’ не существует
2. Гораздо лучше, если используется
SHOW GLOBAL VARIABLES LIKE '%port%';
Ответ №3:
grep port /etc/mysql/my.cnf
(по крайней мере, в debian / ubuntu работает)
или
netstat -tlpn | grep mysql
или
mysql -u user_name -puser_pass -e "SHOW variables LIKE 'port';"
проверить
bind-адрес 127.0.0.1
в /etc/mysql/my.cnf, чтобы увидеть возможные ограничения
Ответ №4:
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
показывает цифровую версию порта вместо именованной версии.
Таким образом, вы можете увидеть имя процесса и порт.
Комментарии:
1. У меня не сработало — я получил «tcp 0 0 127.0.0.1:3306 0.0.0.0: * ПРОСЛУШИВАНИЕ — »
Ответ №5:
Попробуйте использовать только опцию -e
( --execute
):
$ mysql -u root -proot -e "SHOW GLOBAL VARIABLES LIKE 'PORT';" (8s 26ms)
--------------- -------
| Variable_name | Value |
--------------- -------
| port | 3306 |
--------------- -------
Замените root
на ваши «имя пользователя» и «пароль»
Ответ №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>
Ответ №7:
3306 — порт по умолчанию для mysql. Проверьте это с помощью:
netstat -nl|grep 3306
это должно дать этот результат:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* ПРОСЛУШАТЬ
Ответ №8:
Оба URL неверны — должны быть
jdbc:mysql://host:port/database
Я думал, это само собой разумеется, но для подключения к базе данных с помощью Java требуется драйвер JDBC. Вам понадобится драйвер JDBC для MySQL.
Возможно, вы можете подключиться, используя сокет через TCP / IP. Ознакомьтесь с документами MySQL.
Смотрите http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html
Обновить:
Я пытался подключиться по telnet к MySQL ( telnet ip 3306
), но это не работает:
http://lists.mysql.com/win32/253
Я думаю, это то, что вы имели в виду.
Комментарии:
1. Похоже, что это не сработало, когда я попробовал это в своем коде : (Также, когда я вставил это в браузер, Firefox сказал, что он не может открыть такую вещь. Где / как я мог бы это попробовать? — Спасибо!
2. Да, вы не можете открыть его в браузере. Вам нужен драйвер MySQL JDBC и Java-код.
3. это только в том случае, если вы используете Java.
4. Я пытаюсь настроить его с помощью Ruby on Rails через файл database.yml. Но на самом деле мне просто нужен был номер порта.
5. На самом деле это не отвечает на вопрос.
Ответ №9:
Для меня ответ @joseluisq дал:
ОШИБКА 1045 (28000): пользователю ‘root’ @’localhost’ отказано в доступе (использование пароля: НЕТ)
Но это сработало таким образом:
$ mysql -u root@localhost -e "SHOW GLOBAL VARIABLES LIKE 'PORT';"
--------------- -------
| Variable_name | Value |
--------------- -------
| port | 3306 |
--------------- -------
Ответ №10:
вы можете использовать
ps -ef | grep mysql
Ответ №11:
В Mac os X есть два варианта. netstat
или lsof
Использование netstat
не покажет процесс в Mac OS X. таким образом, используя netstat, вы можете выполнять поиск только по порту.При
использовании lsof
будет показано имя процесса.
Я сделал следующее, поскольку столкнулся с конфликтами портов (контейнеры docker):
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)
Ответ №12:
Если вы находитесь в системе, где 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, используемый по умолчанию.
Ответ №13:
Я думаю, что наиболее подходящий способ найти порт, связанный с сервером mysql, используя инструмент командной строки lsof.
lsof -i -n -P | grep mysql
mysqld 1556 prince 10u IPv4 0x6ad3fd78a9051969 0t0 TCP 127.0.0.1:3306 (LISTEN)
Ответ №14:
Я согласен с решением @boortunac. my.conf зависит от mysql, в то время как netstat предоставит вам все прослушивающие порты.
Возможно, используйте оба: один, чтобы подтвердить, какой порт установлен для mysql, а другой, чтобы проверить, прослушивает ли система через этот порт.
Мой клиент использует CentOS 6.6, и я нашел файл my.conf в / etc /, поэтому я использовал:
grep port /etc/my.conf
(CentOS 6.6)