Est-il possible de restaurer un nœud supprimé?

18

Bien que les révisions soient conservées et qu'il soit facile de revenir à une révision précédente d'un nœud, je me demandais s'il était possible de restaurer un nœud qui a vraiment été supprimé par un utilisateur?

Palmin
la source

Réponses:

20

Si vous avez une sauvegarde de base de données (ce que vous devriez;), vous pouvez restaurer une ancienne copie du site et la récupérer de cette façon.

Drupal donne aux utilisateurs un avertissement clair que la suppression d'un nœud est définitive, et il y a une boîte de dialogue de confirmation.

Chris Cohen
la source
19

Ce que dit Chris. Le code lit

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

... donc supprimé signifie vraiment supprimé.

Pour éviter des accidents comme celui-ci, vous souhaiterez peut-être restreindre les autorisations des utilisateurs afin que les utilisateurs ne puissent pas supprimer, mais uniquement annuler la publication des nœuds. Les nœuds non publiés n'apparaîtront pas sur votre site (en supposant que votre site est construit correctement) mais ils restent disponibles dans la base de données.

marcvangend
la source
6
Astuce supplémentaire: pour un onglet dédié et plus de contrôle sur qui peut annuler
marcvangend
2

Oui, il existe plusieurs solutions pour cela.

  • Le premier utilise des sauvegardes complètes qui ont déjà été mentionnées par Chris ici. c'est le plus difficile spécialement si le nœud contient des champs complexes.
  • Utilisation du module https://drupal.org/project/recover , qui surveille
  • Utilisation du module https://drupal.org/project/entity_soft_delete . Il a créé une sorte de corbeille / poubelle pour les nœuds / entités, donc lorsqu'un nœud particulier est supprimé, il ne sera pas supprimé de la base de données, seul son statut passe à supprimé. Ainsi, l'administrateur peut toujours le voir ou même l'utiliser et, si nécessaire, rétablir son état normal ou le supprimer définitivement
Sina Salek
la source
0

Voici une suggestion s'appuyant sur ce que Chris a dit que la rétro-ingénierie répond à @ marcvangend. J'aime utiliser phpMyAdmin, mais vous pouvez faire ce même processus avec la ligne de commande si vous préférez cela.

Comme les autres réponses, cela suppose que vous disposez d'une sauvegarde de votre base de données. Aucune excuse pour ne pas le faire avec des modules impressionnants comme Backup & Migrate.

  1. Créez une nouvelle base de données MySQL vide appelée "restaurer" ou "tester" ou quelque chose de similaire
  2. Créez une nouvelle sauvegarde manuelle pour pouvoir revenir à ce moment, pas la sauvegarde de la nuit dernière si vous en avez besoin
  3. Importez votre sauvegarde dans la nouvelle base de données "restauration"
  4. Accédez au nodetableau, recherchez votre nœud supprimé. J'espère que vous connaissez le nid, mais si vous ne le comprenez pas maintenant.
  5. Sélectionnez la ligne qui a été supprimée et exportez via phpMyAdmin. Il ne devrait y avoir qu'une seule ligne.
  6. Maintenant, allez à la node_revisionstable. Recherchez le nid de votre nœud supprimé et exportez. Il devrait y avoir au moins une ligne, mais pourrait être plus. Exportez tout avec votre nid.
  7. Retournez à la base de données de votre site en direct dans phpMyadmin
  8. Importez les deux fichiers que vous venez d'exporter depuis la sauvegarde
  9. Vérifiez votre travail sur le site en direct

L'utilisation de cette méthode vous permettra de restaurer le nœud unique à partir de la sauvegarde sans perdre aucune modification de la base de données depuis la dernière sauvegarde. Si cela ne vous inquiète pas et que vous ne pensez à rien, mais que la suppression s'est produite depuis la dernière sauvegarde, il serait plus facile de simplement effectuer une restauration complète de la dernière sauvegarde qui doit subir le processus ci-dessus.

squarecandy
la source
Que faire si je vais à la nodetable et que je n'y vois pas le nid supprimé? Est-ce à dire que les choses semblent sombres? Le site est Drupal 8, soit dit en passant.
MadPhysicist