|
| Seamless udskiftning af MySQL-server Fra : Kasper Johansen |
Dato : 23-11-09 18:14 |
|
Hej gruppe.
Jeg har fået til opgave at udskifte en webservers MySQL-server til en
anden ny server - webserveren kører i øjeblikket en masse webapps der
forbinder til localhost.
Jeg har forsøgt med lidt iptables automatisk at viderstille alt trafik
til port 3306 videre til den nye maskine - som der er placeret på
192.168.1.10 (webserveren er 192.168.1.1).
Alt virker hvis jeg forbinder mig fra en anden maskine. Hvis jeg dog
kører et testscript på selve serveren, som der forbinder til localhost
eller 192.168.1.1 - så forsøger den at forbinde til sig selv og bruger
dermed ikke min iptables regel. Forbindelsen fejler derfor, når jeg har
lukket for MySQL-serveren på 192.168.1.1.
Min regel er som følger:
iptables -A FORWARD -p tcp --dport 3306 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT
--to-destination 192.168.1.10:3306
Jeg mener at have læst engang, at MySQL ikke bruger sockets til at
forbinde sig lokalt (nok for at spare nogle ressourcer). Og dermed vil
det selvfølgelig ikke virke, da iptables vel kun påvirker nettrafik. Er
det derfor?
--
Med venlig hilsen
Kasper Johansen
| |
Christian Laursen (23-11-2009)
| Kommentar Fra : Christian Laursen |
Dato : 23-11-09 18:18 |
|
Kasper Johansen wrote:
> Jeg mener at have læst engang, at MySQL ikke bruger sockets til at
> forbinde sig lokalt (nok for at spare nogle ressourcer). Og dermed vil
> det selvfølgelig ikke virke, da iptables vel kun påvirker nettrafik. Er
> det derfor?
Ja, mysql bruger unix sockets, når klienten forbinder til localhost.
Du skal nok enten have alle klientscripts til at forbinde via inet
sockets eller have gang i en lille proxy der kan lytte på en unix socket
og forwarde trafikken til den ønskede mysql-server (Under antagelse af
at protokollen er den samme på begge slags sockets).
--
Christian Laursen
| |
Kent Friis (23-11-2009)
| Kommentar Fra : Kent Friis |
Dato : 23-11-09 18:32 |
|
Den Mon, 23 Nov 2009 18:14:27 +0100 skrev Kasper Johansen:
>
> Min regel er som følger:
>
> iptables -A FORWARD -p tcp --dport 3306 -j ACCEPT
> iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT
> --to-destination 192.168.1.10:3306
>
>
> Jeg mener at have læst engang, at MySQL ikke bruger sockets til at
> forbinde sig lokalt (nok for at spare nogle ressourcer). Og dermed vil
> det selvfølgelig ikke virke, da iptables vel kun påvirker nettrafik. Er
> det derfor?
Det har du fået svar på andetsteds.
En anden ting er at du skal bruge INPUT eller OUTPUT i stedet for
FORWARD, når det er lokalt genereret trafik, og tilsvarende OUTPUT
i stedet for PREROUTING, når i -t nat.
Fra iptables(8):
filter:
This is the default table (if no -t option is
passed). It contains the built-in chains INPUT
(for packets destined to local sockets), FOR
WARD (for packets being routed through the
box), and OUTPUT (for locally-generated pack
ets).
nat:
This table is consulted when a packet that cre
ates a new connection is encountered. It con
sists of three built-ins: PREROUTING(for
altering packets as soon as they come in), OUT
PUT (for altering locally-generated packets
before routing), and POSTROUTING (for altering
packets as they are about to go out).
Mvh
Kent
--
"The Brothers are History"
| |
|
|