是否可以还原已删除的节点?


18

虽然保留了修订版本,并且很容易返回到节点的先前版本,但是我想知道是否可以恢复用户确实删除的节点?

Answers:


20

如果您有数据库备份(应进行;),则可以还原该站点的旧副本并以这种方式进行检索。

Drupal确实向用户发出了明确的警告,即删除节点是最终的,并且有一个确认对话框。


19

克里斯怎么说。代码读取

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

...所以删除实际上意味着删除。

为防止发生此类事故,您可能希望限制用户权限,以便用户不能删除,而只能取消发布节点。未发布的节点将不会显示在您的站点上(假设您的站点构建正确),但是它们在数据库中仍然可用。


6
额外提示:有关专用选项卡和对谁可以取消发布内容的更多控制,请查看“发布内容”模块:drupal.org/project/publishcontent
marcvangend 2011年

2

是的,对此有几种解决方案。

  • 第一个是使用完整备份,克里斯已经在这里提到过。如果节点包含复杂字段,这是最困难的一个。
  • 使用https://drupal.org/project/recover模块监控
  • 使用https://drupal.org/project/entity_soft_delete模块。它为节点/实体创建了一个回收站/垃圾箱,因此当删除特定节点时,仅将其状态更改为“删除”就不会将其从数据库中删除。因此,管理员仍然可以看到甚至使用它,并且如果需要,可以将其状态恢复为正常或永久删除

0

这是基于克里斯所说的反向工程师@marcvangend的回答的建议。我喜欢使用phpMyAdmin,但是如果您更喜欢,可以使用命令行执行相同的过程。

像其他答案一样,这假定您已备份数据库。没有借口不要使用诸如Backup&Migrate之类的出色模块。

  1. 创建一个名为“ restore”或“ testing”或类似名称的新的空MySQL数据库
  2. 创建一个新的手动备份,以便您可以恢复到现在,而不是昨晚的备份(如果需要)
  3. 将备份导入新的“还原”数据库
  4. 转到node表,搜索已删除的节点。希望你知道这个想法,但是如果你现在不明白的话。
  5. 选择已删除的一行并通过phpMyAdmin导出。应该只有一行。
  6. 现在去node_revisions桌子。搜索已删除节点的编号并导出。应该至少有一行,但可以更多。用您的nid导出所有内容。
  7. 回到phpMyadmin中您的实时站点的数据库
  8. 导入刚从备份中导出的两个文件
  9. 在现场查看您的工作

使用此方法将使您可以从备份还原单个节点,而不会丢失自上次备份以来对数据库的任何更改。如果您对此并不担心,并且除了上次备份以来已发生删除操作,您什么也别无所求,那么对上次备份进行完全还原以进行上述过程会更容易。


如果我去了node桌子却看不到删除的nid怎么办?这是否意味着事情看起来严峻?顺便说一下,该站点是Drupal 8。
MadPhysicist

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.