lokalen socket auf externen db-server weiterleiten

MySQL, PostgreSQL, SQLite
cirox
Posts: 212
Joined: 2006-05-08 23:20
Location: Berlin

lokalen socket auf externen db-server weiterleiten

Post by cirox » 2008-10-31 13:45

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?

anyware
Posts: 100
Joined: 2002-11-03 00:21
Location: Berlin

Re: lokalen socket auf externen db-server weiterleiten

Post by anyware » 2008-10-31 15:25

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.

cirox
Posts: 212
Joined: 2006-05-08 23:20
Location: Berlin

Re: lokalen socket auf externen db-server weiterleiten

Post by cirox » 2008-10-31 18:17

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

icebreaker
Posts: 33
Joined: 2006-05-13 19:02

Re: lokalen socket auf externen db-server weiterleiten

Post by icebreaker » 2009-05-09 04:34

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

User avatar
Joe User
Project Manager
Project Manager
Posts: 11139
Joined: 2003-02-27 01:00
Location: Hamburg

Re: lokalen socket auf externen db-server weiterleiten

Post by Joe User » 2009-05-09 12:42

mysql-proxy oder rinetd
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„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.