MySQL - zwei Backups parallel aufspielen?

Sprite

Mitglied
MySQL - altes über neues Backup, vorhandenes übergehen?

Hallo,

ich habe ein phpBB-Forum mit 5 Moderatoren auf MySQL 5.0.41 laufen.
Ein Moderator ist vorgestern auf die Idee gekommen, Beiträge zu löschen, weil sie alt waren. Das passt mir gar nicht, also will ich die alten Beiträge wiederherstellen.

Ich habe zwei Backups.
Backup 1: Zwei Monate alt, alle Beiträge vorhanden
Backup 2: Heute, alte Beiträge weg, aktuelle Beiträge vorhanden

Ich möchte nun beide Backups verschmelzen, dass sozusagen das alte Backup über das aktuelle Backup gespielt wird und die Datenbank die Einträge, die schon vorhanden sind übergeht und nur die Sachen in den Tabellen einfügt, die fehlen.

Geht das überhaupt zu realisieren?

Denn wenn ich versuche das Backup 1 versuche aufzuspielen, bricht er sofort ab, wenn ein Eintrag schon vorhanden ist, statt den einfach zu übergehen.

Code:
MySQL meldet: #1062 - Duplicate entry '3' for key 1
 
Zuletzt bearbeitet:
*push*

Hat das wirklich noch keiner jemals probiert?
Ich habe mal den Threadtitel editiert, war nicht aussagekräftig genug

*edit: Ach Mist, wird nicht im Oberforum geändert.
 
Das geht so nicht ganz so einfach.
Wenn, dann müsstest du das aktuelle Backup mit dem alten manuell abgleichen und die fehlenden Einträge per Hand ins andere kopieren...

Ich würd es so lassen wie es jetzt ist...

Besser is es, du lässt es wie es ist, machst jeden Tag 2 Backups, hälst die 21 Tage vor und dann passier sowas nicht mehr.
 
Hallo,

du kannst bei mysqlimport zwei Optionen mitgeben:

--replace bzw
--ignore


Sie unterscheiden sich darin, wie beim Finden von Key-Duplikaten vorgegangen wird.

Bei --replace ersetzt er einfach den Wert

Bei --ignore übergeht er neue Werte für bereits existierende Einträge.


Empfehlen würde ich dir das ganze für deinen Fall allerdings dennoch nicht, da du ja alte Daten über neue Daten "drüber" laufen lassen willst. Du kannst natürlich mit --ignore arbeiten, aber trotzdem denke ich gibt es Seiteneffekte.

Markus
 
Zuletzt bearbeitet:
Wenn, dann müsstest du das aktuelle Backup mit dem alten manuell abgleichen und die fehlenden Einträge per Hand ins andere kopieren...

Das habe ich probiert und nach 6 Stunden, wo ich gerade mal 5% ändern konnte, fallen lassen :).


Besser is es, du lässt es wie es ist, machst jeden Tag 2 Backups, hälst die 21 Tage vor und dann passier sowas nicht mehr.

Ich habe den Moderatoren die Lösch-Rechte entzogen, damit ist das Thema eh erledigt.


Bei --ignore übergeht er neue Werte für bereits existierende Einträge.

Vielen Dank, das INSERT IGNORE ist genau das was ich gesucht habe.


Empfehlen würde ich dir das ganze für deinen Fall allerdings dennoch nicht, da du ja alte Daten über neue Daten "drüber" laufen lassen willst. Du kannst natürlich mit --ignore arbeiten, aber trotzdem denke ich gibt es Seiteneffekte.

Ein bißchen Muffensausen habe ich schon. Darum werde ich das ganze Freitag früh ausgiebig testen und vorher ein neues Backup machen, ob sich da etwas selbst zerstört oder ob es klappt. Ich befürchte in erster Linie Posting-Leichen, die keinem Forum zugeordnet sind, weil ich zwischen den 2 Backups mal 1 Unterforum gelöscht und alle Threads darin verschoben habe.

Mal schauen, was passiert.
 
So, habe es mal probiert.

Der Erfolg war, dass alle Threads, die eine Umfrage in sich hatten, wiederhergestellt wurden. Vereinzelte auch ohne. Über 70% blieben jedoch verschwunden.

Außerdem waren dann die Anzeigen für geschriebene Themen und Beiträge und diverse andere Auflistungen falsch.

Ich habe die Aktion also abgebrochen :(.
 
Hallo nochmal,

soetwas hab ich fast erwartet.

Wenn es den Aufwand rechtfertigt, kannst du natürlich die 2 Dumps in je eine Datenbank importieren lassen und dann ein Skript schreiben, was den eigentlichen "Merge" durchführt. Dazu musst du natürlich die Tabellenstrukturen und Zusammenhänge kennen.

Markus
 
Zurück