CRC32 über Zeile?

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