Mysql: Verbindung trotz falschem Port

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Mysql: Verbindung trotz falschem Port

Beitrag von Meillo » 19.02.2019 09:13:38

Hoi,

ich verstehe die Welt nicht. Vielleicht koennt ihr ein bisschen Licht in die Sache bringen.

Ich habe den Port von meinem Mysqld von 3306 testweise auf 3304 umgelegt:

Code: Alles auswählen

# netstat -plant | grep mysql
tcp        0      0 0.0.0.0:3304            0.0.0.0:*               LISTEN      53609/mysqld
Wenn ich nun auf 3306 verbinden will, funktioniert das natuerlich nicht:

Code: Alles auswählen

:-L telnet localhost 3306
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Wenn ich aber mit mysql(1) das gleiche mache, funktioniert es:

Code: Alles auswählen

:-L mysql -P 3306
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 88
Server version: 5.5.60-0+deb7u1 (Debian)

Copyright (c) 2000, 2018, 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> Bye
Warum?


Der Hintergrund des Problems ist, dass ich aus einem PHP-Script mit mysqli das Verbinden auf andere Ports testen wollte. Es ist egal, welchen Port ich angebe oder wo der Mysqld lauscht, ich kann die Verbindung immer aufbauen.

Das riecht eigentlich stark nach dem Fall, dass man einen anderen Code anschaut als den den man ausfuehrt, -- ich glaube zwar nicht, aber wer weiss. Darum bin ich auf die Shell zurueckgegangen und habe dort mit telnet(1) vs. mysql(1) das Problem runtergebrochen.

Was ich mir noch erklaeren koennte, waere, dass mysql(1) irgendeine Magie im Hintergrund hat, die den Port des [mysqld]-Abschnitts in der /etc/mysql/my.cnf zusaetzlich ausprobiert. Aber dass das PHP-Modul mysqli das auch macht ...?


Jetzt hoffe ich auf eure Erfahrungen und euer Knowhow: Hattet ihr das Problem auch schon? Weiss jemand mehr darueber? Wo soll ich weiter ansetzen mit dem Debuggen?
Use ed once in a while!

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Mysql: Verbindung trotz falschem Port

Beitrag von heisenberg » 19.02.2019 09:21:56

Die Portangabe wird ignoriert, wenn Du über den Hostnamen "localhost" eine Verbindung aufbaust. Dann wird die Verbindung immer per UnixDomainSocket(/var/run/mysqld/mysqld.sock oder so ähnlich) aufgebaut. Hostname "localhost" ist default. Eine Verbindung über TCP/IP erzwingst Du mit dem Hostnamen anders als localhost, also z. B. 127.0.0.1.

Das Verhalten sollte sowohl mit dem Kommandozeilen-client als auch in den MySQL-Bibliotheken für die Programmiersprachen das gleiche sein.

Alternative ist noch explizit --protocol=TCP anzugeben.

Siehe:
https://dev.mysql.com/doc/refman/8.0/en/connecting.html
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Mysql: Verbindung trotz falschem Port

Beitrag von Meillo » 19.02.2019 09:31:39

heisenberg hat geschrieben: ↑ zum Beitrag ↑
19.02.2019 09:21:56
Die Portangabe wird ignoriert, wenn Du über den Hostnamen "localhost" eine Verbindung aufbaust. Dann wird immer der Socket(/var/run/mysql/mysql.sock oder so ähnlich) verwendet. Hostname "localhost" scheint wohl der default zu sein. Eine Verbindung über TCP/IP erzwingst Du mit dem Hostnamen anders als localhost, also z. B. 127.0.0.1.
Uff! Danke! Da waere ich nie drauf gekommen. :THX:


... und wieder ein gutes Beispiel, warum man keine Magie in Software einbauen sollte. ``Gut gemeint'' fuehrt am Ende meist zu mehr Problemen. (Und das geht alles zurueck auf das Grundproblem, dass man essenzielle Komplexitaet vor dem Nutzer/Programmierer verstecken will, damit man den Anschein wahren kann, dass alles einfach waere. Statt ``bequem und versteckend'' ist aber ``simpel und straight-forward'' das bessere Einfach!)
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Mysql: Verbindung trotz falschem Port

Beitrag von Meillo » 19.02.2019 09:43:36

https://dev.mysql.com/doc/refman/8.0/en/connecting.html hat geschrieben: On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs.
Verletzt das Principle of Least Surprise (POLS). Sie sagen es ganz direkt.

Dieses Prinzip gibt es ja nicht ohne Grund. Die 2h vergeudete Arbeitszeit, das Herausgerissenwerden aus meinem Flow, der Frust ... das alles sind die Kosten, die ich wegen dieser Verletzung tragen muss. Ich bin sicher nicht der Einzige, dem's so geht. Und die Mysql-Entwickler selber muessen auch Kosten tragen, durch mehr Code fuer die Magie, durch mehr Testfaelle, die man pruefen muss. Dann gibt es noch Kosten fuer die zusaetzliche Dokumentation (beim Schreiben und beim Lesen, und beim Drucken von Buechern ...).

Wenn ich mal doch noch ein Buch schreibe, dann wahrscheinlich, um solche Faelle darzulegen ... wobei das alles eigentlich laengst schon passiert ist; diese Buecher gibt es schon, es juckt nur keinen. Es wird immer wieder neue Scheisse produziert ... unabhaengig davon ob man schon haette wissen koennen, dass es Scheisse ist und dass die stinkt und eklig ist.

So, und jetzt mache ich mal Schluss hier. :roll:
Use ed once in a while!

Antworten