É possível restaurar um nó excluído?

18

Enquanto as revisões são mantidas e é fácil voltar para uma revisão anterior de um nó, fiquei pensando se é possível restaurar um nó que realmente foi excluído por um usuário?

Palmin
fonte

Respostas:

20

Se você tiver um backup do banco de dados (o que você deve;), você pode restaurar uma cópia antiga do site e recuperá-la dessa maneira.

O Drupal fornece aos usuários um aviso bastante claro de que a exclusão de um nó é final e existe um diálogo de confirmação.

Chris Cohen
fonte
19

O que Chris diz. O código

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

... então excluído significa realmente excluído.

Para evitar acidentes como esse, convém restringir as permissões do usuário para que os usuários não possam excluir, mas apenas cancelar a publicação de nós. Nós não publicados não aparecerão no seu site (supondo que ele seja construído corretamente), mas eles permanecerão disponíveis no banco de dados.

Marcvangend
fonte
6
Dica extra: por um guia dedicado e mais controle sobre quem pode despublicar o que, veja o módulo de conteúdo Publicar: drupal.org/project/publishcontent
marcvangend
2

Sim, existem várias soluções para isso.

  • O primeiro está usando backups completos, que já foram mencionados por Chris aqui. este é o mais difícil, especialmente se o nó contiver campos complexos.
  • Usando o https://drupal.org/project/recover module, que monitora
  • Usando o módulo https://drupal.org/project/entity_soft_delete . Ele criou uma espécie de reciclagem / lixeira para nós / entidades. Assim, quando um nó específico é excluído, ele não será removido do banco de dados, apenas seu status será alterado para excluído. Assim, o administrador ainda pode vê-lo ou mesmo usá-lo e, se necessário, alterar seu status de volta ao normal ou excluí-lo permanentemente
Sina Salek
fonte
0

Aqui está uma sugestão baseada no que Chris disse que a resposta dos engenheiros reversos @ marcvangend. Eu gosto de usar o phpMyAdmin, mas você pode fazer o mesmo processo com a linha de comando, se preferir.

Como as outras respostas, isso pressupõe que você tenha um backup do seu banco de dados. Não há desculpa para não usar módulos impressionantes como Backup & Migrate por aí.

  1. Crie um novo banco de dados MySQL vazio chamado "restore" ou "testing" ou algo semelhante
  2. Crie um novo backup manual para poder reverter para esse momento, não o backup da noite anterior, se precisar
  3. Importe seu backup para o novo banco de dados "restore"
  4. Vá para a nodetabela, procure seu nó excluído. Espero que você saiba o nid, mas se você não descobrir agora.
  5. Selecione a linha que foi excluída e exporte via phpMyAdmin. Deve haver apenas uma linha.
  6. Agora vá para a node_revisionsmesa. Pesquise no nid do seu nó excluído e exporte. Deve haver pelo menos uma linha, mas pode haver mais. Exporte tudo com o seu nid.
  7. Volte ao banco de dados do site ao vivo no phpMyadmin
  8. Importe os dois arquivos que você acabou de exportar do backup
  9. Verifique seu trabalho no site ao vivo

O uso desse método permitirá restaurar o nó único do backup sem perder nenhuma alteração no banco de dados desde o último backup. Se você não está preocupado com isso e não pensa em nada além da exclusão desde o último backup, seria mais fácil fazer uma restauração completa do último backup a ser submetido ao processo acima.

squarecandy
fonte
E se eu for para a nodemesa e não encontrar o nid excluído lá? Isso significa que as coisas parecem sombrias? O site é Drupal 8, a propósito.
MadPhysicist