Ich habe folgendes Problem. Es läuft ein Web-und ein MySQL-Server auf getrennten Maschinen. Beide haben eine öffentliche IP. Unter Angabe des Datenbankservers auf dem Webserver kann sich auch ganz normal verbunden werden. Hier wird ja nicht der Socket benutzt. Ich möchte nun, daß wenn man auf dem Webserver den Datenbankserver mit "localhost" ebenfalls ansprechen kann. Dazu wird ja der Socket benutzt. Dieser ist logischerweise nicht vorhanden, da ja unter "localhost" kein MySQL Server läuft.
Ich habe einen SSH Tunnel probiert, ein iptables PREROUTING Rule und über eine vpn Verbindung nachgedacht. Beides ohne Erfolg. Es erscheint immer die Meldung:
MySQL geht bei der Verwendung von localhost leider nie über 127.0.0.1, sondern aus Performancegründen immer über einen Socket. Ein Umbiegen mit iptables und co funktioniert daher leider nicht. Was du brauchst ist socat (http://www.dest-unreach.org/socat/). Damit kannst du auf dem Webserver lokal einen Socket öffnen und an den DB-Sever über TCP weiterleiten. Auf dem DB-Server greifst du dann per socat den TCP-Port ab und leitest die Daten auf den MySQL-Socket weiter.
Könnte man mit socat auch dazu bringen, auf einer IP zu lauschen und die Anfragen dann zum lokalen Socket zu leiten oder vielleicht direkt an 127.0.0.1:3306?
Mein DB-Server sollte für Webanwendungen über den lokalen Socket ( und 127.0.0.1 für einige C-Programme ) erreichbar sein. Trotzdem möchte ich eine Replikation über den OpenVPN-Tunnel durchführen und hätte gerne eine "Umleitung" von 10.0.0.1:3306 auf 127.0.0.1:3306 ( oder Sock ). Gäbe es für diesen Fall vielleicht eine bessere Lösung?
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.