Automatische Datensicherung der Datenbank

paulee

Erfahrenes Mitglied
Hallo!

Will bei einem Projekt eine "backup"-Funktion einbauen. Und zwar sollen alle Daten die auf den mySQL- Server geschrieben werden, parallel auf einen zweiten übertragen werden. Habe schon im Internet gesucht, und probiert aber leider nichts dergleichen gefunden.

Ist das überhaupt möglich?


lg
 
Möglich ist das bestimmt nur sehr ungewöhnlich...
würde es nicht reichen einmal am Tag ein Backup erstellen zu lassen ?
 
Ich denke es sollte moeglich sein von MySQL aus die Synchronisation sicherzustellen ohne, dass sich PHP darum kuemmern muss.
Mit einem Aufruf wirst Du sicher nicht auf beide Server schreiben koennen (wie auch?), aber Du kannst auch 2 mal mysql_query() hintereinander setzen.
Beispiel:
PHP:
$db1=mysql_connect('server1','user','password');
$db2=mysql_connect('server2','user','password');
mysql_select_db('datenbank',$db1);
mysql_select_db('datenbank',$db2);
mysql_query("insert into `tee` (`sorte`) values ('hustentee')",$db1);
mysql_query("insert into `tee` (`sorte`) values ('hustentee')",$db2);
mysql_close($db1);
mysql_close($db2);
Wenn Du das so angehen willst wuerde ich Dir empfehlen einen eigene Funktion zu schreiben die die Daten eintraegt, so kannst Du auch spaeter recht einfach die 2. Datenbank deaktivieren.
PHP:
function mysql_my_query($query,$resources)
{
 for ($x=0;$x<count($resources);$x++)
 {
  mysql_query($query,$resources[$x]);
 }
}
$resources ist dabei ein Array mit den zu nutzenden Resourcen. Dazu ein Beispiel:
PHP:
mysql_my_query("insert into `tee` (`sorte`) values ('hustentee')",array($db1,$db2));
 
Das ist ja alles reine ressourcen verschwendung....

Das Zauberwort heisst replikation.

Alles was auf dem einen Server geändert wird, schickt mysql auch gleich selber an den Slave server.

Sollte der Slave mal ausfallen, neu gestartet werden müssen oder ähnliches, speichert der Master das zwischen und der Slave holt alles nach was er verpasst hat.

Wenn Ihr das mit PHP löst, und der 2. Server nicht da ist, wird das Script gar nicht mehr gehen.

Also ab auf mysql.org und die Server für Replikation konfigurieren und fertig. Alle Diskussionen das über PHP zu machen sind sicherheitstechnisch völlig absurd....

http://dev.mysql.com/doc/refman/4.0/de/replication-implementation.html

Es muss nur mal was ausfallen und alles läuft aus dem Ruder.


Marcus
 
Hallo!

Wo im Internet hast Du denn gesucht?
Wenn Du auch hier im Forum gesucht hast, dann offensichtlich nicht gründlich genug. ;)
Denn Dennis seine Möglichkeit habe ich in ähnlicher Form auch mal gepostet gehabt, nur mit dem Unterschied dass bei meinem Code auf unterschiedliche Daten von 2 Servern zugegriffen werden sollte..... spielt vom Prinzip aber keine Rolle.
Lange Rede kurzer Sinn, es geht..... nur solltest Du beachten dass:
1. der "Backupserver" externe Zugriffe erlaubt.
2. einer der Server auch mal ausfallen könnte.

Ersteres lässt sich ja ganz leicht mit einem kleinem Testscript prüfen. ;)
Beim 2. Problem würde ich dafür sorgen dass das Script ungehindert weiter arbeiten kann und Du eine Benachrichtigung bekommst.
Problematisch wird es allerdings wenn Du Einträge an Hand der ID verknüpft hast.....
Beispiel: Du hast in Tabelle A einen Eintrag mit der ID 5 in dem steht z.b. "nutze das Bild mit der ID 10 aus Tabelle B".
Nun fällt ein Server aus..... irgendwann läuft er wieder..... bis Du gemerkt hast dass er wieder läuft, sind 10 neue Einträge hinzugekommen.
Während der eine Server aber ausgefallen war, sind auf dem andern 20 Einträge hinzugekommen.
Auf dem einen Server ihust Du nun als höchste ID in Tabell A die ID 15 und in Tabelle B die ID 20.
Auf dem anderen Server hingegen in Tabelle A die ID 35 und in Tabelle B die ID 40..... dem zufolge steht in Tabelle A bei ID 35 nun "nutze das Bild mit der ID 40 aus Tabelle B".
Auf dem ausgefallenen Server gibt es die ID 40 in Tabelle B aber noch garnicht..... und wenn es sie irgendwann gibt, dann verweist sie auf das falsche Bild..... das Chaos ist also perfekt. ;)
Du solltest Dir also ganz genau überlegen ob es den gewünschten Effekt stört wenn die Datenbanken nicht mehr 1:1 synchron sind (weil z.b. die ID's unterschiedlich sind).

Wenn es sich jedoch um ein reines Backup handelt, also nicht um ein Mirror, dann würde ich einfach nur in regelmässigen Abständen ein SQL-Dump erstellen lassen.
Dieses würde ich dann aber per Cronjob erledigen lassen.

Gruss Dr Dau
 
"Und zwar sollen alle Daten die auf den mySQL- Server geschrieben werden, parallel auf einen zweiten übertragen werden"

Da steht doch parallel, also GLEICHZEITIG, nicht 3 mal am Tag.....


Die ganzen Probleme die auftauchen könnten, kann man ins unendliche verlängern.

Und wenn Ihr ihm weiter Tipps gebt, wie man es NICHT machen sollte, dann wird der junge noch ganz bekloppt.

Weg von der PHP Lösung.... Es kann nicht aufgabe der Applikation sein, sich um das Backup zu kümmern.
Das soll der Mysql Server schon selber machen, dafür ist er schliesslich da. Und die Funktionen dafür müssen in der my.cnf nur aktiviert werden.

Auf dem Master die Master ID festlegen und bin-log aktivieren.
Auf dem Slave die Slave ID festlegen und einstellen wer der Master server ist.

Beide Server EINMAL auf den gleichen Stand bringen (bei ausgeschalteteten mysql das Datenverzeichnis rüberkopieren, gilt aber nur für MyISAM Tabellen ansonsten dumpen und einspielen.)

Erst dann den Master starten und anschliessend den Slave, der holt sich alle Änderungen ab die im bin-log stehen und führt die bei sich auch aus, auch rückwirkend wenn er mal ausfällt.

Gruß

Marcus
 
Hallo!

Ich danke für die vielen Antworten ! Hab mir alles sehr aufmerksam durchgelesen. Nachdem ich die vielen Nachteile gelesen habe, habe ich mir überlegt, nur einmal pro Woche / pro Tag ein Backup zu machen .
Ich glaube, dies löst dann einiges an Problemen ;)
 
Zurück