Como testar em qual porta o MySQL está sendo executado e se pode ser conectado?

143

Eu instalei o MySQL e até loguei lá como usuário.

Mas quando tento me conectar assim:

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

Nem funciona. Não tenho certeza se ambos devem funcionar, mas pelo menos um deles deve :)

Como posso ter certeza de que a porta é realmente 3306? Existe um comando linux para vê-lo de alguma forma? Além disso, existe uma maneira mais correta de experimentá-lo por meio de um URL?

GeekedOut
fonte

Respostas:

207

Para encontrar um ouvinte em uma porta, faça o seguinte:

netstat -tln

Você deve ver uma linha assim: se o mysql estiver realmente ouvindo nessa porta.

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

A porta 3306 é a porta padrão do MySql.

Para conectar, você só precisa usar o cliente que precisar, como o cliente mysql básico.

banco de dados do usuário mysql -h localhost -u

Ou um URL que é interpretado pelo código da sua biblioteca.

Keith
fonte
2
O que significa quando, em vez de 127.0.0.1:3306, diz 0.0.0.0:3306?
mbmast
1
@mbmast the 127 ... significa ouvir apenas no host local (não acessível externamente). O 0.0.0.0 significa "todas as interfaces" e, portanto, é (geralmente) visível externamente.
9306 Keith
Eu achava que era visível externamente, tinha que ser o endereço IP da máquina e que 0.0.0.0 significa que o serviço não está disponível em qualquer lugar. Eu entendi errado? Eu tenho uma caixa executando o MySQL, o firewall tem 3306 aberto a partir de qualquer endereço IP, mas o MySQL está recusando a conexão, pensei porque atualmente o MySQL está escutando no 0.0.0.0.
mbmast
Deve mesclar isso com a resposta de @ bortunac, que faz referência ao -pparâmetro. Adicionar o (s) processo (s) realmente ajuda a tornar essas informações mais úteis.
Ragaar 5/07
1
@JBeck três sinalizadores, para Linux. TCP, ouvintes, sem pesquisa de nome. veja man netstat.
9307 Keith
138

Usando o cliente Mysql:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
enagra
fonte
ERRO 1146 (42S02): A tabela 'performance_schema.global_variables' não existe
Maria Ines Parnisari
65

grep port /etc/mysql/my.cnf (pelo menos no debian / ubuntu funciona)

ou

netstat -tlpn | grep mysql

verificar

endereço de ligação 127.0.0.1

em /etc/mysql/my.cnf para ver possíveis restrições

Bortunac
fonte
32
netstat -tlpn

Ele mostrará a lista como abaixo:

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

Use como root para todos os detalhes. A -topção limita a saída às conexões TCP, -lpara portas de atendimento, -plista o nome do programa e -nmostra a versão numérica da porta em vez de uma versão nomeada.

Dessa forma, você pode ver o nome do processo e a porta.

mPrinC
fonte
1
Não funcionou para mim - recebi "tcp 0 0 127.0.0.1:3306 0.0.0.0:* OUVIR -"
Bryan Bryan
7

Tente usar apenas a opção -e( --execute):

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

Substitua rootpor seu "nome de usuário" e "senha"

joseluisq
fonte
6

Ambos os URLs estão incorretos - devem ser

jdbc:mysql://host:port/database

Eu pensei que era óbvio, mas conectar-se a um banco de dados com Java requer um driver JDBC. Você precisará do driver JDBC do MySQL .

Talvez você possa se conectar usando um soquete sobre TCP / IP. Confira os documentos do MySQL .

Consulte http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

ATUALIZAR:

Tentei telnetar no MySQL ( telnet ip 3306), mas não funciona:

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

Eu acho que é isso que você tinha em mente.

duffymo
fonte
Não parecia funcionar quando tentei no meu código :( Além disso, quando colei em um navegador, o Firefox disse que não pode abrir uma coisa dessas. Onde / como eu poderia experimentá-lo? - Obrigado!
GeekedOut
Sim, você não pode abri-lo em um navegador. Você precisa do driver JDBC do MySQL e do código Java.
Duffymo
3
isso é apenas se você estiver usando Java.
Keith
Eu estou tentando configurá-lo usando Ruby on Rails através do arquivo database.yml. Mas eu realmente precisava do número da porta.
precisa saber é o seguinte
Isso realmente não responde à pergunta.
AStopher
6

Uma abordagem mais simples para alguns: Se você quiser apenas verificar se o MySQL está em uma determinada porta, você pode usar o seguinte comando no terminal. Testado em mac. 3306 é a porta padrão.

mysql --host=127.0.0.1 --port=3306

Se você logar com sucesso no terminal shell do MySQL, você é bom! Esta é a saída que recebo em um login bem-sucedido.

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>
Monarch Wadia
fonte
5

3306 é a porta padrão para o mysql. Verifique com:

netstat -nl|grep 3306

deve dar este resultado:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* ESCUTE

zygimantus
fonte
3

você pode usar

ps -ef | grep mysql
don625
fonte
3

Para mim, a resposta de @ joseluisq rendeu:

ERRO 1045 (28000): acesso negado para o usuário 'root' @ 'localhost' (usando a senha: NO)

Mas funcionou desta maneira:

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

No Mac OS X, existem duas opções. netstatoulsof

O uso netstatnão mostrará o processo no Mac OS X. Portanto, usando o netstat, você pode pesquisar apenas por porta.
Usandolsof irá mostrar o nome do processo.

Fiz o seguinte quando estava enfrentando conflitos de porta (contêineres de encaixe):

netstat -aln | grep 3306

Saídas: tcp46 0 0 *.3306 *.* LISTEN

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

Saídas: mysqld 60608 _mysql 31u IPv6 0x2ebc4b8d88d9ec6b 0t0 TCP *:3306 (LISTEN)

toddcscar
fonte
2

Se você estiver em um sistema em que netstatnão está disponível (por exemplo, RHEL 7 e versões mais recentes do Debian), você pode usar ss, como abaixo:

sudo ss -tlpn | grep mysql

E você obterá algo como o seguinte para saída:

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

A quarta coluna é Local Address:Port. Portanto, neste caso, o Mysql está escutando na porta 3306, o padrão.

nelsonda
fonte
1

Concordo com a solução da @ bortunac. O my.conf é específico do mysql, enquanto o netstat fornece todas as portas de escuta.

Talvez use ambos, um para confirmar qual porta está configurada para o mysql e o outro para verificar se o sistema está escutando através dessa porta.

Meu cliente usa o CentOS 6.6 e encontrei o arquivo my.conf em / etc /, então usei:

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

mmmdearte
fonte