mysql abgleichen ??

MySQL, PostgreSQL, SQLite
blackcrow
Posts: 31
Joined: 2002-12-27 01:34

mysql abgleichen ??

Post by blackcrow » 2004-07-04 10:13

Hallo ihr lieben,


ich habe folgendes Problem und hoffe, daß ich hier nun in die richtige Rubrik schreibe.

Ich habe auf meinem Server ein Forum laufen, welches eine ziemlich große Datenbank hat. Nun möchte ich ein zweites Forum dieser Art installieren, das ist ja sowiet kein Problem, aber....
Dieses zweite Forum soll seine eigene Datenbank nutzen, zumindest für die Beiträge u.s.w. aber soll die Userdaten aus der Datenbank vom "Hauptforum" beziehen.
Da es nicht möglich ist an der Software irgendwas umzuschreiben, da es eine komerzielle Software ist die in c+ geschrieben ist habe ich mir folgendes überlegt:

Ein Script, welches die Userdaten aus der Hauptdatenbank in die Datenbank für das zweite Forum überträgt. Das könnte man doch bestimmt per Cronjob machen zb alle 5 Min oder so.

Ist sowas möglich? Wenn ja.. weiss jemand wie das geht? Ich hab schon eine Menge Hilfen abgeklappert, aber nirgends was gefunden.

Ich danke euch für eure Hilfe.

Gruß

Miguel

evilh
Posts: 126
Joined: 2004-03-25 17:45

Re: mysql abgleichen ??

Post by evilh » 2004-07-04 12:31

na klar ist das möglich. du machst einfach einen dump der entsprechenden user tabelle (users oder wei auch immer die heisst) und spielst die komplett in die 2.datenbank ein (davor eben ein drop machen)

blackcrow
Posts: 31
Joined: 2002-12-27 01:34

Re: mysql abgleichen ??

Post by blackcrow » 2004-07-04 12:42

Oh, na das ist doch schonmal super, weiss auch jemand wie sowas aussehen müsste? Bin net gerade gut im Scripten :(

bjulian84
Posts: 23
Joined: 2004-06-25 10:55
Location: Dortmund

Re: mysql abgleichen ??

Post by bjulian84 » 2004-07-04 12:45

Problem:
Wenn Du die Hauptdatenbank immer über die zweite "haust", dann verlierst Du die Einträge in der zweiten DB! (Also alle User die sich dort registriert haben)

Also bräuchtest Du ein Skript, dass in beide Richtungen abgleicht ..
Aber MySQL unterstützt ja auch Replikation, d.h. die zweite DB holt die Daten aus der 1. und ist so aktuell. Es gibt also eine Master-DB und eine Slave-DB, damit ist das Problem von oben noch nicht gelöst.
Du kannst aber auch 2-way Replikation machen, d.h. jede Datenbank ist Server und Slave. Bei auto_increment Feldern ist das ganze etwas problematisch und nicht mehr deterministisch. Denn es kann ja sein, dass die zweite DB einen User mit der Nummer 1001 aufnimmt und die DB 1 auch, was dann?
Dieses Problem kann man zumindest minimieren, wenn die Verbindung zwischen beiden DBs immer besteht, denn dann wird in einer DB der User 1001 eingetragen und sofort in die andere DB übertragen, so dass dort ein neuer User die Nummer 1002 bekommt. Das passiert im ms-Bereich, aber sicher kann man nie sein!

Mehr zu Replikation gibts unter http://www.mysql.com (Suche in der Doku nach Replikation)

Gruss,
Julian

blackcrow
Posts: 31
Joined: 2002-12-27 01:34

Re: mysql abgleichen ??

Post by blackcrow » 2004-07-04 12:51

Ach so.. nee das hatte ich vergessen zu sagen.. gut das Du es ansprichst.. in dem zweiten Forum soll keine registration möglich sein, das geht nur über das erste Forum. Soweit solte das kein Problem sein, nur weiss ich nicht wie ich das umsetzen soll.

Liebe Grüße

Miguel

bjulian84
Posts: 23
Joined: 2004-06-25 10:55
Location: Dortmund

Re: mysql abgleichen ??

Post by bjulian84 » 2004-07-04 17:22

Dann ists doch simpel!
Einfach den einen als Replikationsmaster und den anderen als Replikationsslave, das wars!

Außer ab und an kontrollieren, wars das dann ... :roll:

blackcrow
Posts: 31
Joined: 2002-12-27 01:34

Re: mysql abgleichen ??

Post by blackcrow » 2004-07-04 22:24

Simpel ist einfach gesagt.. ich weiss nun das es anscheinend funzt, aber wie ich das machen muss hab ich noch ne4t erfahren.

Weiss jemand die eine solche Bashdatei aussehen müsste?

bjulian84
Posts: 23
Joined: 2004-06-25 10:55
Location: Dortmund

Re: mysql abgleichen ??

Post by bjulian84 » 2004-07-05 11:57

Naja, ein bißchen mehr Eigeninitiative hätte ich schon erwartet ...

Hier eine Anleitung:
http://www.phpbuilder.com/columns/tanov ... 0912.php3

1. User auf der Master-DB anlegen, der alles kann
(da stellt sich die Frage, muss er das eigentlich?)
2. Master neu laden (FLUSH PRIVILEGES) oder neustarten
in my.cnf "log-bin" aktivieren
(die Optionen hierzu auf
http://dev.mysql.com/doc/mysql/en/Replication.html
beachten, da Du nur eine Tabelle replizieren willst)
3. Hardcopy aller Daten auf den Slave (die repliziert werden sollen)
4. Slave einstellen:
master-host=10.1.1.1 #IP oder Hostname des Master-DB
master-user=replicate #Benutzer von Schritt 1
master-password=password #Passwort des Benutzers aus Schritt 1
(in my.cnf)
5. Slave neu starten

Kontrolle auf Slave: STOP SLAVE; START SLAVE; SHOW SLAVE STATUS
Kontrolle auf Master: SHOW MASTER STATUS

Gruss,
Julian

oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: mysql abgleichen ??

Post by oxygen » 2004-07-05 16:46

Replikation ist in diesem Fall auch Unfug. So wie ich das verstanden habe, laufen beide Foren auf dem gleichen Server und nur die User Tabelle soll "geshared" werden. Replikation macht aber nur bei verschiedenen Servern und ganzen Datenbanken Sinn. Einfacher wäre es, per Cron z.B. alle 5 min folgendes aufzurufen:

mysqldump db1 bb1_user --opt -uUser -pPasswort | mysql db2 -uUser -pPasswort

bjulian84
Posts: 23
Joined: 2004-06-25 10:55
Location: Dortmund

Re: mysql abgleichen ??

Post by bjulian84 » 2004-07-05 17:48

Wenns die gleiche DB ist dann wirds wirklich schwierig ...
Sorry, hatte ich nicht dran gedacht!