Comment tester sur quel port MySQL fonctionne et s'il peut être connecté?

143

J'ai installé MySQL et même connecté en tant qu'utilisateur.

Mais quand j'essaye de me connecter comme ça:

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

Aucun des deux ne fonctionne. Je ne sais pas si les deux sont censés fonctionner, mais au moins l'un d'entre eux devrait :)

Comment puis-je m'assurer que le port est bien 3306? Existe-t-il une commande linux pour le voir d'une manière ou d'une autre? Existe-t-il également un moyen plus correct de l'essayer via une URL?

GeekedOut
la source

Réponses:

207

Pour rechercher un écouteur sur un port, procédez comme suit:

netstat -tln

Vous devriez voir une ligne qui ressemble à ceci si mysql écoute effectivement sur ce port.

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

Le port 3306 est le port par défaut de MySql.

Pour vous connecter, il vous suffit d'utiliser le client dont vous avez besoin, comme le client mysql de base.

mysql -h localhost -u base de données utilisateur

Ou une URL qui est interprétée par le code de votre bibliothèque.

Keith
la source
2
Qu'est-ce que cela signifie quand au lieu de 127.0.0.1:3306, il dit 0.0.0.0:3306?
mbmast
1
@mbmast the 127 ... signifie écouter uniquement sur l'hôte local (non accessible de l'extérieur). Le 0.0.0.0 signifie "toutes les interfaces", et est donc (généralement) visible de l'extérieur.
Keith
Je pensais être visible de l'extérieur, il devait s'agir de la propre adresse IP de la machine et que 0.0.0.0 signifie que le service n'est pas disponible de n'importe où. Est-ce que je me trompe? J'ai une boîte exécutant MySQL, le pare-feu a 3306 ouvert à partir de n'importe quelle adresse IP mais MySQL refuse la connexion, j'ai pensé car actuellement MySQL écoute sur 0.0.0.0.
mbmast
Devrait fusionner cela avec la réponse de @ bortunac, qui fait référence au -pparamètre. L'ajout du ou des processus contribue vraiment à rendre ces informations plus utiles.
Ragaar
1
@JBeck trois drapeaux, pour Linux. TCP, écouteurs, pas de recherche de nom. voir man netstat.
Keith
138

Utilisation du client Mysql:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
énagre
la source
ERREUR 1146 (42S02): La table 'performance_schema.global_variables' n'existe pas
Maria Ines Parnisari
65

grep port /etc/mysql/my.cnf (au moins dans les travaux debian / ubuntu)

ou

netstat -tlpn | grep mysql

Vérifier

adresse de liaison 127.0.0.1

dans /etc/mysql/my.cnf pour voir les restrictions possibles

Bortunac
la source
32
netstat -tlpn

Il affichera la liste quelque chose comme ci-dessous:

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

Utilisez comme root pour tous les détails. L' -toption limite la sortie aux connexions TCP, -lpour les ports d'écoute, -prépertorie le nom du programme et -naffiche la version numérique du port au lieu d'une version nommée.

De cette façon, vous pouvez voir le nom du processus et le port.

mPrinC
la source
1
Cela n'a pas fonctionné pour moi - J'ai obtenu "tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -"
Bryan
7

Essayez uniquement d'utiliser l' option -e( --execute):

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

Remplacez rootpar votre "nom d'utilisateur" et "mot de passe"

Joseluisq
la source
6

Les deux URL sont incorrectes - devraient être

jdbc:mysql://host:port/database

Je pensais que cela allait sans dire, mais la connexion à une base de données avec Java nécessite un pilote JDBC. Vous aurez besoin du pilote MySQL JDBC .

Peut-être que vous pouvez vous connecter en utilisant un socket sur TCP / IP. Consultez la documentation MySQL .

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

METTRE À JOUR:

J'ai essayé de telnet dans MySQL ( telnet ip 3306), mais cela ne fonctionne pas:

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

Je pense que c'est ce que vous aviez à l'esprit.

duffymo
la source
Cela ne semble pas fonctionner lorsque je l'ai essayé dans mon code: (De plus, lorsque je l'ai collé dans un navigateur, Firefox a dit qu'il ne pouvait pas ouvrir une telle chose. Où / comment pourrais-je l'essayer? - Merci!
GeekedOut
Ouais, vous ne pouvez pas l'ouvrir dans un navigateur. Vous avez besoin du pilote MySQL JDBC et du code Java.
duffymo
3
ce n'est que si vous utilisez Java.
Keith
J'essaye de le configurer en utilisant Ruby on Rails via le fichier database.yml. Mais j'avais vraiment besoin du numéro de port.
GeekedOut
Cela ne répond pas vraiment à la question.
AStopher
6

Une approche plus simple pour certains: si vous voulez juste vérifier si MySQL est sur un certain port, vous pouvez utiliser la commande suivante dans le terminal. Testé sur mac. 3306 est le port par défaut.

mysql --host=127.0.0.1 --port=3306

Si vous vous connectez avec succès au terminal shell MySQL, tout va bien! C'est le résultat que j'obtiens lors d'une connexion réussie.

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>
Monarque Wadia
la source
5

3306 est le port par défaut pour mysql. Vérifiez-le avec:

netstat -nl|grep 3306

il devrait donner ce résultat:

tcp 0 0127.0.0.1:3306 0.0.0.0:* ÉCOUTER

zygimantus
la source
3

vous pouvez utiliser

ps -ef | grep mysql
don625
la source
3

Pour moi, la réponse de @ joseluisq a donné:

ERREUR 1045 (28000): Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: NON)

Mais cela a fonctionné de cette façon:

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

Sur un mac os X, il existe deux options. netstatoulsof

L'utilisation netstatne montrera pas le processus sur Mac OS X. Ainsi, en utilisant netstat, vous ne pouvez rechercher que par port.
Utiliser lsofaffichera le nom du processus.

J'ai fait ce qui suit car je rencontrais des conflits de port (conteneurs docker):

netstat -aln | grep 3306

Les sorties: tcp46 0 0 *.3306 *.* LISTEN

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

Les sorties: mysqld 60608 _mysql 31u IPv6 0x2ebc4b8d88d9ec6b 0t0 TCP *:3306 (LISTEN)

toddcscar
la source
2

Si vous êtes sur un système qui netstatn'est pas disponible (par exemple RHEL 7 et les versions plus récentes de Debian), vous pouvez utiliser ss, comme ci-dessous:

sudo ss -tlpn | grep mysql

Et vous obtiendrez quelque chose comme ce qui suit pour la sortie:

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

La quatrième colonne est Local Address:Port. Donc, dans ce cas, Mysql écoute sur le port 3306, la valeur par défaut.

Nelsonda
la source
1

Je suis d'accord avec la solution de @ bortunac. my.conf est spécifique à mysql tandis que netstat vous fournira tous les ports d'écoute.

Utilisez peut-être les deux, l'un pour confirmer le port défini pour mysql et l'autre pour vérifier que le système écoute via ce port.

Mon client utilise CentOS 6.6 et j'ai trouvé le fichier my.conf sous / etc /, donc j'ai utilisé:

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

mmmdearte
la source