2010-12-09 6 views
8

ich Linux Mint renne und zu versuchen, mySQL auf diese Weisewarum mySQL auf jedem Verbindungs ​​/ alle Ports

mysql --port=3306 -u root -p 

Dann fordert er mich nach meinem Passwort zu verbinden. Das ist alles in Ordnung. Warum ist es, dass, wenn ich so etwas wie dies gebe es funktioniert immer noch ....

mysql --port=1234 -u root -p 

Sollte das nicht scheitern, da es kein mySQL Server läuft auf Port 1234?

Der Grund, warum ich das frage, ist, weil ich einen SSH-Tunnel erstellen möchte, um eine Verbindung zu einer Datenbank auf einem anderen Server herzustellen. Angenommen, der SSH-Tunnel leitet all meinen Datenverkehr von localhost: 3308 an myremoteserver: 3306 weiter. Da mein lokaler mySQL-Server meine Verbindungen an allen Ports akzeptiert, kann ich keine Verbindung zum Port 3308 herstellen und den Remote-Server nicht erreichen. Ich treffe immer noch meinen lokalen Server ....

Auch wenn meine SSH-Tunnel-Optionen möglicherweise falsch waren, fragte ich mich, ob jemand wüsste, warum ich Verbindung zu Port 1234 und es immer noch meine lokalen mySQL-Server läuft auf 3306 ?

+0

Beim Einrichten „Werke“ sagen, meinen Sie es nach dem Passwort aufgefordert (die es wird), oder geht darüber hinaus und protokolliert Sie tatsächlich auf dem Server mysql? Wenn Sie eine Verbindung zu einem SSH-Tunnel herstellen möchten, der einen lokalen Port verwendet, empfehle ich, den Host auch an der mysql-Client-Eingabeaufforderung anzugeben. 'mysql --port = 3308 -hlocalhost -u root -p'. Dies würde verhindern, dass Ihr mysql-Client eine Unix-Pipe für die Verbindung zu Ihrem Server verwendet. Sehen Sie sich auch den Abschnitt [client] von /etc/my.cnf an. – Vic

+0

Ja, es speichert mich tatsächlich auf dem mySQL-Server. Dies ist das Neueste, das ich versuchte, und es mich tatsächlich in den mySQL-Server anmeldet ... mysql -h localhost --port = 12312312 -u root -p –

Antwort

10

IIRC mysql Sie an einen Unix-Socket verbindet, wenn Sie den lokalen Host verbinden. Da es in diesem Fall keine Verbindung über TCP gibt, ist kein Port beteiligt, und die von Ihnen angegebene Portnummer spielt keine Rolle.

Edit: Nicht sicher, ob das auf allen Systemen zutrifft, aber wenn ich 127.0.0.1 oder den Hostnamen anstelle von localhost verwende, verbindet sich mysql über TCP und die Portnummer ist wichtig - ich kann nur mit der richtigen Portnummer verbinden .

+0

Perfekter Dank! Hat funktioniert, als ich 127.0.0.1 benutzt habe. Ist es irgendwie möglich, dass ich mysQL zwingen kann, TCP zu benutzen, selbst wenn ich localhost eintippe? –

+1

@girdus: Sie können eine [Optionsdatei] erstellen (http://dev.mysql.com/doc/refman/5.0/en/option-files.html). Fügen Sie im Abschnitt "[client]" die Zeile 'host = 127.0.0.1' hinzu. Das ändert nichts daran, was passiert, wenn Sie 'localhost' verwenden, aber * * erzwingt, dass der Standardwert' 127.0.0.1' anstelle von 'localhost' ist. (Siehe den Link für die Dokumentation, wie die Datei strukturiert ist und wohin sie gehen soll. – Lee

1

Es fragt Sie nach Ihrem Passwort vor versucht es zu verbinden. Wenn Sie Ihr Passwort (oder irgendetwas anderes für diese Angelegenheit) eingeben, und lassen Sie es gehen, wird es mit so etwas wie reagieren:

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

Es tut mir leid, ich habe vergessen zu erwähnen, dass es mich tatsächlich verbindet Ich gebe mein Passwort ein ... –

11

Um eine TCP-Verbindung zu erzwingen, verwenden Sie --protocol=TCP.

Beispiel:

Zuerst wird der SSH-Tunnel

ssh -L 4000:localhost:3306 server.ch 

und dann mit

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

@titanoboa, thx für diese an den Remote-MySQL-Server verbinden! Ich hatte das gleiche Problem. hinzufügen können Sie tatsächlich auch für localhost TCP-Verbindung erzwingen folgende

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

Prost

Verwandte Themen