CRC32 über Zeile?
am 18.04.2006 14:44:41 von christoph.soellner
Hi *,
ich habe zwei gleiche Datenbanken auf verschiedenen
Servern (A und B), die aktuell gehalten werden sollen.
A ist der Produktiv-Server im I-Net, B der Backup
hinter einer DynDNS. Nun soll B sich immer um 24:00
die geänderten Daten von A holen.
Um die Differenzen festzustellen, würde ich gerne einen
CRC32 über die jeweilige _Zeile_ einer jeden Tabelle fahren,
um eine Liste der Primärschlüssel der von B aus A zu ladenen
Datensätze zu erhalten.
Das ganze soll mittels Stored-Procedure "get_pKeys(%%TABLE%%)"
realisiert werden. Nur: Wie baue ich einen CRC32 von
gemischten Spalten (INT FLOAT CHAR VCHAR)?
Oder geht das anders effizienter? (Merke: Auf Maschine
A habe ich keinen Zugriff, nur alle Rechte auf der DB)
Danke,
Christoph
Re: CRC32 überZeile?
am 18.04.2006 15:00:06 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: CRC32 über Zeile?
am 18.04.2006 16:05:07 von christoph.soellner
>> Oder geht das anders effizienter? (Merke: Auf Maschine
> Ein Trigger, der Dir die geänderten records aufzeichnet bzw. in einer
> timestamp-Spaltedas vermerkt?
Da sah ich den Wald vor lauter Baeumen nicht...
Natuerlich voellig richtig.
> Ansonsten: mit einer concat-Funktion/Operator alles zusammenklatschen,
> etwa so [...]:
Tut auch, aber mit dem Trigger gefaellt mir das viel besser.
Danke,
Christoph
Re: CRC32 über Zeile?
am 18.04.2006 16:09:42 von Axel Schwenke
"Christoph Soellner" wrote:
>
> ich habe zwei gleiche Datenbanken auf verschiedenen
> Servern (A und B), die aktuell gehalten werden sollen.
>
> A ist der Produktiv-Server im I-Net, B der Backup
> hinter einer DynDNS. Nun soll B sich immer um 24:00
> die geänderten Daten von A holen.
Klingt wie ein Szenario für die MySQL-eigene Replikation. Laß die
MySQL-Instanz auf A ein Binlog schreiben. Jede Nacht startest du
ein neues Binlog auf A per FLUSH LOGS und startest den Slave auf B.
Dann wartest du so lange, bis B das alte Binlog abgearbeitet hat.
Dann stoppst du den Slave auf B und löschst das alte Binlog auf A
per FLUSH MASTER LOGS.
Das alles kann per Cronjob auf B geschehen und du brauchst
lediglich eine MySQL-Verbindung von B nach A.
> Merke: Auf Maschine
> A habe ich keinen Zugriff, nur alle Rechte auf der DB
Die einzige Kooperation die du von Machine A brauchst, ist daß das
Binlog eingeschaltet wird und daß dein Nutzer-Account die Rechte
für Replikation und FLUSH (MASTER) LOGS bekommt.
XL