/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
port-forward af mysql
Fra : Mads Lie Jensen


Dato : 11-09-08 16:52

Hej

Jeg har samlet mig en ny server, som gradvist skal overtage for min
nuværende server som bl.a kører en del virtualhosts i apache. Mange af
disse benytter sig af mysql og php.

Jeg regnede med at jeg kunne sætte mysql op på den nye server og så via
iptables få det lavet sådan at når php skulle have fat i mysql på port
3306, blev forespørgslerne videresendt til den nye server.

Jeg kan bare ikke få det til at virke helt.
Jeg kører:
iptables -t nat -A PREROUTING --destination 192.168.1.4 --protocol tcp
--destination-port 3306 -j DNAT --to-destination 192.168.1.1:3306
iptables -t nat -A OUTPUT --destination 192.168.1.4 --protocol tcp
--destination-port 3306 -j DNAT --to-destination 192.168.1.1:3306

192.168.1.1 er den nye server (hvor mysql skal flyttes over på)
192.168.1.4 er den gamle (hvorpå webserveren kører)

Det virker næsten. Hvis jeg nu fra 192.168.1.1 telnetter til 192.168.1.4
3306 får jeg fat i mysql-serveren på 192.168.1.1 som jeg vil.
Jeg kan se at min courier-imapserver også bliver sendt videre.
Men php som forbinder sig til mysql får stadig fat i mysql på
192.168.1.4.

Hvad gør jeg galt? Er det overhovedet muligt at flytte mysql til en ny
server, og transperant videresende dertil?
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

 
 
Mads Lie Jensen (12-09-2008)
Kommentar
Fra : Mads Lie Jensen


Dato : 12-09-08 19:17

On Thu, 11 Sep 2008 17:52:19 +0200, Mads Lie Jensen <mads@gartneriet.dk>
wrote:

>Hvad gør jeg galt? Er det overhovedet muligt at flytte mysql til en ny
>server, og transperant videresende dertil?

Det lader til jeg slet ikke gør noget galt ...... tcp-forbindelser til
port 3306 ryger fint videre til den rigtige server.

Problemet er i stedet at når man forbinder til 'localhost' på mysql, så
bruger den UNIX sockets til forbindelsen, i stedet for tcp.
Dvs. jeg kan godt forwarde tcp-trafik for mysql til den nye server, men
slipper alligevel ikke for at ændre i alle mine php-websites
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Christian Laursen (12-09-2008)
Kommentar
Fra : Christian Laursen


Dato : 12-09-08 19:50

Mads Lie Jensen <mads@gartneriet.dk> writes:

> Det lader til jeg slet ikke gør noget galt ...... tcp-forbindelser til
> port 3306 ryger fint videre til den rigtige server.
>
> Problemet er i stedet at når man forbinder til 'localhost' på mysql, så
> bruger den UNIX sockets til forbindelsen, i stedet for tcp.
> Dvs. jeg kan godt forwarde tcp-trafik for mysql til den nye server, men
> slipper alligevel ikke for at ændre i alle mine php-websites

Du kan bruge socat e.l. til at forwarde fra en unix-socket til en tcp
port på den anden maskine.

--
Christian Laursen

Mads Lie Jensen (13-09-2008)
Kommentar
Fra : Mads Lie Jensen


Dato : 13-09-08 07:29

On Fri, 12 Sep 2008 20:50:08 +0200, Christian Laursen
<xi@borderworlds.dk> wrote:

>> Det lader til jeg slet ikke gør noget galt ...... tcp-forbindelser til
>> port 3306 ryger fint videre til den rigtige server.
>>
>> Problemet er i stedet at når man forbinder til 'localhost' på mysql, så
>> bruger den UNIX sockets til forbindelsen, i stedet for tcp.
>> Dvs. jeg kan godt forwarde tcp-trafik for mysql til den nye server, men
>> slipper alligevel ikke for at ændre i alle mine php-websites
>
>Du kan bruge socat e.l. til at forwarde fra en unix-socket til en tcp
>port på den anden maskine.

Det ser interessant ud, men jeg kan ikke rigtig få det til at virke.
Jeg forsøger med:

socat -d -d -d tcp:192.168.1.1:3306,fork
UNIX-CONNECT:/var/lib/mysql/mysql.sock

på maskinen hvor den gamle mysql kører.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Michael Rasmussen (12-09-2008)
Kommentar
Fra : Michael Rasmussen


Dato : 12-09-08 19:26



Klaus Ellegaard (12-09-2008)
Kommentar
Fra : Klaus Ellegaard


Dato : 12-09-08 19:29

Michael Rasmussen <mir@miras.org> writes:

>At du forbinder til localhost, medfører ikke per automatik, at der
>anvendes en unix-socket.

Det gør det faktisk, viser praktiske forsøg.

MySQL oversætter "localhost" til "Unix-socket". Hvis man i stedet
for localhost specificerer "127.0.0.1", får man det forventede
resultat.

Mvh.
   Klaus.

Mads Lie Jensen (12-09-2008)
Kommentar
Fra : Mads Lie Jensen


Dato : 12-09-08 20:53

On Fri, 12 Sep 2008 20:26:18 +0200, Michael Rasmussen <mir@miras.org>
wrote:

>> Problemet er i stedet at når man forbinder til 'localhost' på mysql, så
>> bruger den UNIX sockets til forbindelsen, i stedet for tcp.
>At du forbinder til localhost, medfører ikke per automatik, at der
>anvendes en unix-socket.

Det påstår mysql.com ellers i deres egen manual:
<http://dev.mysql.com/doc/refman/5.0/en/connecting.html>

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

N/A (12-09-2008)
Kommentar
Fra : N/A


Dato : 12-09-08 19:29



N/A (12-09-2008)
Kommentar
Fra : N/A


Dato : 12-09-08 19:59



N/A (12-09-2008)
Kommentar
Fra : N/A


Dato : 12-09-08 19:59



Michael Rasmussen (12-09-2008)
Kommentar
Fra : Michael Rasmussen


Dato : 12-09-08 19:48



Klaus Ellegaard (12-09-2008)
Kommentar
Fra : Klaus Ellegaard


Dato : 12-09-08 19:59

Michael Rasmussen <mir@miras.org> writes:

>Nu er jeg ikke specialist udi MySQL, men for mig at se er det en
>temmelig hjemmeforfattet opfattelse af TCP/IP.

Velkommen til MySQL

Som sagt - jeg har selv været dybt frustreret over den "feature".

Mvh.
   Klaus.

Kent Friis (13-09-2008)
Kommentar
Fra : Kent Friis


Dato : 13-09-08 09:18

Den Fri, 12 Sep 2008 20:48:12 +0200 skrev Michael Rasmussen:
> --Sig_/MOG8OOm/0CH1Q9fdSu9cInp
> Content-Type: text/plain; charset=ISO-8859-1
> Content-Transfer-Encoding: quoted-printable
>
> On Fri, 12 Sep 2008 18:28:51 +0000 (UTC)
> Klaus Ellegaard <klausellegaard@msn.com> wrote:
>
>>=20
>> MySQL overs=E6tter "localhost" til "Unix-socket". Hvis man i stedet
>> for localhost specificerer "127.0.0.1", f=E5r man det forventede
>> resultat.
> Nu er jeg ikke specialist udi MySQL, men for mig at se er det en
> temmelig hjemmeforfattet opfattelse af TCP/IP. Man kunne med lige s=E5
> stor ret medgive, at forbindelse til 127.0.0.1 skulle foretages med
> unix-socket.

127.0.0.1 er et IP-nummer. IP-numre giver kun mening når man bruger
IP.

localhost er bare et navn der fortæller hvilken maskine der skal
connectes til. Det siger ikke noget om protokollen.

Set på den måde er det da logisk at MySQL vælger den hurtigste
protokol når der kun angives et navn, og IP når der angives et
IP-nummer.

Mvh
Kent
--
Hvis en sort kat går over vejen foran en bil, betyder det ulykke

.... for katten.

Michael Rasmussen (12-09-2008)
Kommentar
Fra : Michael Rasmussen


Dato : 12-09-08 20:52



Michael Rasmussen (12-09-2008)
Kommentar
Fra : Michael Rasmussen


Dato : 12-09-08 20:57



Kent Friis (13-09-2008)
Kommentar
Fra : Kent Friis


Dato : 13-09-08 09:21

Den Fri, 12 Sep 2008 21:56:45 +0200 skrev Michael Rasmussen:
> --Sig_/nR3GrD7ELAH5mjfa6RwrCIZ
> Content-Type: text/plain; charset=ISO-8859-1
> Content-Transfer-Encoding: quoted-printable
>
> On Fri, 12 Sep 2008 21:52:54 +0200
> Mads Lie Jensen <mads@gartneriet.dk> wrote:
>
>>=20
>> Det p=E5st=E5r mysql.com ellers i deres egen manual:
>> <http://dev.mysql.com/doc/refman/5.0/en/connecting.html>
>>=20
> Ja, MySQL g=F8r, men det er ikke en korrekt implementation af TCP/IP.

Unix-sockets har ikke noget med TCP/IP at gøre, så "korrekt
implementation af TCP/IP" er irrelevant.

Var der tale om en ældre Windows, ville default - når der kun er angivet
et navn og ikke noget om hvordan der skal connectes - være NETBEUI. På
Novell ville det sikkert være IPX.

Der står ingen steder at default skal være TCP/IP.

Mvh
Kent
--
Hvis en sort kat går over vejen foran en bil, betyder det ulykke

.... for katten.

Peter Makholm (13-09-2008)
Kommentar
Fra : Peter Makholm


Dato : 13-09-08 08:40

Christian Laursen <xi@borderworlds.dk> writes:

>> Problemet er i stedet at når man forbinder til 'localhost' på mysql, så
>> bruger den UNIX sockets til forbindelsen, i stedet for tcp.
>
> Du kan bruge socat e.l. til at forwarde fra en unix-socket til en tcp
> port på den anden maskine.

Jo, men det skal pakkes passende ind. Ellers vil socat kun forwarede
en forbindelse. Jeg har selv måtte lave noget tilsvarende dog i
perl. Det er ikke ultra-svært, men man skal lige holde tungen lige i
munden med hensyn til hvordan man lukker forbindelserne.

//Makholm

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste