2010-12-09 22 views
8

Je suis sous Linux Mint et tente de se connecter à mySQL cette façonpourquoi mySQL connecter à tout/tous les ports

mysql --port=3306 -u root -p 

Ensuite, il me invite à entrer mon mot de passe. Tout va bien. Pourquoi est-ce que quand je tape quelque chose comme cela, il fonctionne encore ....

mysql --port=1234 -u root -p 

Si cela échoue pas car il n'y a pas de serveur mySQL en cours d'exécution sur le port 1234?

La raison pour laquelle je pose cette question est parce que je veux créer un tunnel SSH pour se connecter à une base de données sur un autre serveur. Disons que le tunnel SSH transférera tout mon trafic de localhost: 3308 à myremoteserver: 3306. Depuis mon serveur mySQL local accepte mes connexions sur tous les ports, je ne peux pas réellement se connecter au port 3308 et frapper le serveur distant. Je continue à utiliser mon serveur local ...

Même si mes options de tunnel SSH étaient erronées, je me demandais si quelqu'un savait pourquoi je pouvais me connecter au port 1234 et qu'il touchait toujours mon serveur mySQL local fonctionnant sous 3306 ?

+0

Quand vous dites « œuvres », voulez-vous dire que vous demande le mot de passe (il), ou va au-delà de cela et vous connecte réellement dans le serveur mysql? Si vous voulez vous connecter à un tunnel SSH qui utilise un port local, je suggère également de spécifier l'hôte à l'invite du client mysql. mysql --port = 3308 -hlocalhost -u root -p'. Cela empêcherait votre client mysql d'utiliser un tube Unix pour se connecter à votre serveur. Regardez aussi la section [client] de /etc/my.cnf. – Vic

+0

Oui, il me connecte au serveur mySQL. C'est la dernière fois que j'ai essayé avec et il me connecte réellement dans le serveur de mySQL ... mysql -h localhost --port = 12312312 -u root -p –

Répondre

10

IIRC mysql vous connecte à un socket Unix si vous connectez à localhost. Comme il ne vous connecte pas via TCP dans ce cas, aucun port n'est impliqué et le numéro de port que vous donnez n'a pas d'importance. Edit: Je ne sais pas si cela est vrai sur tous les systèmes, mais si j'utilise 127.0.0.1 ou le nom d'hôte au lieu de localhost, mysql se connecte via TCP et le numéro de port importe - Je peux me connecter avec le bon numéro de port .

+0

Parfait merci! A travaillé quand j'ai utilisé 127.0.0.1. Y at-il de toute façon que je peux forcer MySQL à utiliser TCP même si je tape dans localhost? –

+1

@girdus: Vous pouvez créer un [fichier d'option] (http://dev.mysql.com/doc/refman/5.0/fr/option-files.html). dans la section '[client]', ajoutez la ligne 'host = 127.0.0.1'. Cela ne changera pas ce qui se passe quand vous utilisez 'localhost', mais cela * forcera la valeur par défaut à' 127.0.0.1' au lieu de 'localhost'. (Voir le lien pour la documentation sur la façon dont le fichier est structuré, et où il devrait aller. – Lee

1

Il vous demandera votre mot de passe avant il essaie de se connecter. Si vous entrez votre mot de passe (ou toute autre chose d'ailleurs), et le laisser procéder, il répondra avec quelque chose comme:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock' 
+0

Je suis désolé j'ai oublié de mentionner qu'il me relie réellement après Je saisis mon mot de passe ... –

11

Pour forcer une connexion TCP, utilisez --protocol=TCP.

Exemple:

D'abord le tunnel SSH

ssh -L 4000:localhost:3306 server.ch 

puis se connecter au serveur distant mysql avec

mysql -h localhost --port=4000 --protocol=TCP -u root -p 
1

@titanoboa, thx pour cela! J'avais le même problème. Pour vous ajouter pouvez réellement forcer la connexion TCP même pour localhost en utilisant les suivantes

[client] 
port = 3306 
socket = /var/run/mysqld/mysqld.sock 
protocol = TCP 

Vive