Page 1 of 1

lokalen socket auf externen db-server weiterleiten

Posted: 2008-10-31 13:45
by cirox
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:

Code: Select all

Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock
Wie kann man das lösen?

Re: lokalen socket auf externen db-server weiterleiten

Posted: 2008-10-31 15:25
by anyware
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.

Re: lokalen socket auf externen db-server weiterleiten

Posted: 2008-10-31 18:17
by cirox
Thx, das war der richtige Tip.

Code: Select all

/usr/bin/socat -d -lf/var/log/socat.log UNIX-LISTEN:/var/run/mysqld/mysqld.sock,reuseaddr,fork,unlink-early,mode=777 TCP4:ZIELRECHNER:3306

Re: lokalen socket auf externen db-server weiterleiten

Posted: 2009-05-09 04:34
by icebreaker
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?

Danke im Voraus !

mfG
Ice

Re: lokalen socket auf externen db-server weiterleiten

Posted: 2009-05-09 12:42
by Joe User
mysql-proxy oder rinetd