Ist es möglich, einen gelöschten Knoten wiederherzustellen?

18

Während Revisionen beibehalten werden und es einfach ist, zu einer vorherigen Revision eines Knotens zurückzukehren, habe ich mich gefragt, ob es möglich ist, einen Knoten wiederherzustellen, der wirklich von einem Benutzer gelöscht wurde.

Palmin
quelle

Antworten:

20

Wenn Sie über eine Datenbanksicherung verfügen (die Sie durchführen sollten), können Sie eine alte Kopie der Site wiederherstellen und auf diese Weise abrufen.

Drupal warnt die Benutzer deutlich davor, dass das Löschen eines Knotens endgültig ist, und es gibt einen Bestätigungsdialog.

Chris Cohen
quelle
19

Was Chris sagt. Der Code lautet

    db_query('DELETE FROM {node} WHERE nid = %d', $node->nid);
    db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid);

... also gelöscht heißt wirklich gelöscht.

Um Unfälle wie diese zu vermeiden, möchten Sie möglicherweise die Benutzerberechtigungen einschränken, damit Benutzer keine Knoten löschen, sondern nur deren Veröffentlichung aufheben können. Nicht veröffentlichte Knoten werden auf Ihrer Site nicht angezeigt (vorausgesetzt, Ihre Site ist ordnungsgemäß erstellt), sie bleiben jedoch in der Datenbank verfügbar.

marcvangend
quelle
6
Zusätzlicher Tipp: Wenn
Sie
2

Ja, dafür gibt es mehrere Lösungen.

  • Die erste Methode verwendet vollständige Backups, die Chris hier bereits erwähnt hat. Dies ist besonders dann am schwierigsten, wenn der Knoten komplexe Felder enthält.
  • Verwenden des https://drupal.org/project/recover-Moduls , das überwacht
  • Verwendung des https://drupal.org/project/entity_soft_delete Moduls. Es wurde eine Art Papierkorb für Knoten / Entitäten erstellt. Wenn ein bestimmter Knoten gelöscht wird, wird er nicht aus der Datenbank entfernt, sondern nur sein Status ändert sich in gelöscht. So kann der Administrator es weiterhin sehen oder sogar benutzen und bei Bedarf seinen Status wieder auf normal setzen oder es dauerhaft löschen
Sina Salek
quelle
0

Hier ist ein Vorschlag, der auf den Aussagen von Chris aufbaut, die Reverse Engineers @ marcvangend beantwortet haben. Ich verwende gerne phpMyAdmin, aber Sie können den gleichen Vorgang mit der Befehlszeile ausführen, wenn Sie das besser mögen.

Wie bei den anderen Antworten wird davon ausgegangen, dass Sie eine Sicherungskopie Ihrer Datenbank haben. Keine Entschuldigung, nicht mit großartigen Modulen wie Backup & Migrate da draußen.

  1. Erstellen Sie eine neue leere MySQL-Datenbank mit dem Namen "restore" oder "testing" oder ähnlichem
  2. Erstellen Sie ein neues manuelles Backup, damit Sie auf diesen Moment zurückgreifen können, und nicht auf das Backup der letzten Nacht, falls erforderlich
  3. Importieren Sie Ihr Backup in die neue "Restore" -Datenbank
  4. Gehen Sie zur nodeTabelle und suchen Sie nach Ihrem gelöschten Knoten. Hoffentlich kennen Sie das NID, aber wenn Sie es jetzt nicht herausfinden.
  5. Wählen Sie die eine Zeile aus, die gelöscht wurde, und exportieren Sie sie über phpMyAdmin. Es sollte nur eine Zeile geben.
  6. Nun geh zum node_revisionsTisch. Suchen Sie auf der NID Ihres gelöschten Knotens und exportieren Sie. Es sollte mindestens eine Reihe geben, es können aber auch mehrere sein. Exportiere alles mit deiner NID.
  7. Gehen Sie in phpMyadmin zurück zur Datenbank Ihrer Live-Site
  8. Importieren Sie die beiden Dateien, die Sie gerade aus der Sicherung exportiert haben
  9. Überprüfen Sie Ihre Arbeit auf der Live-Site

Mit dieser Methode können Sie den einzelnen Knoten aus der Sicherung wiederherstellen, ohne dass Änderungen an der Datenbank seit der letzten Sicherung verloren gehen. Wenn Sie sich darüber keine Gedanken machen und nicht denken, dass der Löschvorgang seit der letzten Sicherung stattgefunden hat, ist es einfacher, die letzte Sicherung, die den obigen Vorgang durchläuft, vollständig wiederherzustellen.

squarecandy
quelle
Was ist, wenn ich zum nodeTisch gehe und die gelöschte NID dort nicht sehe? Bedeutet das, dass die Dinge düster aussehen? Die Seite ist übrigens Drupal 8.
MadPhysicist