Daten zwischen 2 DBs transferieren, Name der Zieltabelle ist anders

User avatar
mattis
Posts: 41
Joined: 2008-12-30 17:44
Location: Bayern

Daten zwischen 2 DBs transferieren, Name der Zieltabelle ist anders

Post by mattis »

Hallo,

ich habe hier ein kleines Problem:

Und zwar gibt es zwei Debian-Server (reine Testserver), auf denen jeweils ein MySQL-basierter Postfix läuft.

Nun sollen von jedem Server die Daten aus der jeweiligen Tabelle "postfix.domains" auf den jeweils anderen Server übertragen werden und dort in die Tabelle "postfix.relaydomains" eingespielt werden. Das gleiche Spiel noch mit zwei weiteren Tabellen.

Den Dump zu erstellen, so das nur die Daten der jeweiligen Tabelle exportiert werden, keine Tabellen gelöscht und angelegt werden, habe ich noch hinbekommen ;-)

Aber gibt es denn nun eine Möglichkeit, die exportierten Daten auf der anderen Seite in eine Tabelle, welche über einen anderen Namen verfügt, wieder einzulesen?

Wie würdet ihr sowas am besten realisieren?


Danke.


LG
Top

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: Daten zwischen 2 DBs transferieren, Name der Zieltabelle ist anders

Post by daemotron »

matzewe01 wrote:Alternative kleines Perl Script, das selbst einen Datendump z.B. als XML, CSV oder was auch immer auf der einen Seite erstellt und auf der anderen Seite wieder einspielt.

Da würde ich die Methode mit sed vorziehen. Bei einer einmaligen Angelegenheit dürfte das am schmerzlosesten sein (und bei einem Mailserver-Backend sind es sicherlich auch keine TB an Datenbeständen).
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time
Top

User avatar
mattis
Posts: 41
Joined: 2008-12-30 17:44
Location: Bayern

Re: Daten zwischen 2 DBs transferieren, Name der Zieltabelle ist anders

Post by mattis »

Erstmal danke für eure Antworten.

Ich habe jetzt eine andere Lösung mit einem kleinen Script gebastelt: Die entsprechenden Daten werden aus der DB gelesen, in mehrere Textdateien exportiert und passend zusammengefasst. Diese gehen dann per SCP auf die Reise zum Zielserver und werden dort über SSH entsprechend weiterverarbeitet.

Vermutlich alles viel zu kompliziert ;-)

Schau mer mal, ob es wie gewünscht funktioniert.
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: Daten zwischen 2 DBs transferieren, Name der Zieltabelle ist anders

Post by isotopp »

Mattis wrote:Nun sollen von jedem Server die Daten aus der jeweiligen Tabelle "postfix.domains" auf den jeweils anderen Server übertragen werden und dort in die Tabelle "postfix.relaydomains" eingespielt werden. Das gleiche Spiel noch mit zwei weiteren Tabellen.


Dafür gibt es mehrere Möglichkeiten.

Erstens kann man die Datei auf dem Quellserver in eine Textdatei dumpen, mit sed oder perl bearbeiten und dann zum Zielserver kopieren und dort einlesen.

Zweitens kann man auf dem Zielserver ein zweites Schema federated anlegen und in diesem Schema die Tabelle aus dem Quellserver als FEDERATED Tabelle einrichten, am Besten unter dem Originalnamen. Dann kann man die Daten auf dem Zielserver mit

Code: Select all

use zielschema;
CREATE TABLE relaydomains_new LIKE relaydomains;
INSERT INTO relaydomains_new SELECT * FROM federated.domains;
RENAME TABLE relaydomains TO relaydomains_old, relaydomains_new TO relaydomains;


Dieser Ansatz verzichtet auf einen Dump und verwendet stattdessen einen Datenbank-Datenbank-Link für den Transfer. Die Engine FEDERATED ist experimentell und man muß mit SHOW ENGINES prüfen, ob sie in dem Build enthalten ist, den man verwendet. FEDERATED funktioniert auch nicht so, wie man sich das vorstellt - daher sollte man von komplizierten Queries auf FEDERATED-Tabellen absehen (oder Guiseppe Maxias 'missing manual' lesen).

Der Ansatz hat den Vorteil, daß er mit einem RENAME TABLE atomisch arbeitet. Das bedeutet, daß die zwei RENAMES in einem Statement zusammengefaßt sind und im Block zusammen und ununterbrechbar ausgeführt werden. Die Tabelle relaydomains ist daher zu keinen Zeitpunkt nicht verfügbar.
Top