削除されたノードを復元することは可能ですか?


18

リビジョンが保持され、ノードの前のリビジョンに戻るのは簡単ですが、ユーザーが実際に削除したノードを復元できるかどうか疑問に思っていましたか?

回答:


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

2

はい、これにはいくつかの解決策があります。

  • 最初の方法は、ここでChrisが既に言及した完全バックアップを使用しています。これは、ノードに複雑なフィールドが含まれる場合に特に困難なものです。
  • 監視するhttps://drupal.org/project/recoverモジュールの使用
  • https://drupal.org/project/entity_soft_deleteモジュールを使用します。特定のノードが削除された場合、そのステータスが削除された場合にのみデータベースから削除されないように、ノード/エンティティのリサイクル/ゴミ箱のようなものを作成しました。そのため、管理者はそれを表示または使用することができ、必要に応じてステータスを通常に戻すか、完全に削除できます

0

以下は、@ marcvangendの答えをリバースエンジニアリングするというChrisの発言に基づいた提案です。私はphpMyAdminを使用するのが好きですが、それがよければ、コマンドラインで同じプロセスを実行できます。

他の回答と同様に、これはデータベースのバックアップがあることを前提としています。Backup&Migrateのような素晴らしいモジュールを使用しない理由はありません。

  1. 「restore」または「testing」などと呼ばれる新しい空のMySQLデータベースを作成します
  2. 必要に応じて昨夜のバックアップではなく、この瞬間に戻ることができるように、新しい手動バックアップを作成します
  3. バックアップを新しい「復元」データベースにインポートします
  4. nodeテーブルに移動し、削除したノードを検索します。できればnidを知っているが、今それを理解していない場合。
  5. 削除された1つの行を選択し、phpMyAdminを介してエクスポートします。行は1つだけにする必要があります。
  6. 今、node_revisionsテーブルに行きます。削除されたノードのnidを検索してエクスポートします。少なくとも1つの行が必要ですが、複数の行がある場合もあります。すべてをnidでエクスポートします。
  7. phpMyadminでライブサイトのデータベースに戻ります
  8. バックアップからエクスポートした2つのファイルをインポートします
  9. ライブサイトで作業を確認する

この方法を使用すると、最後のバックアップ以降のデータベースへの変更を失うことなく、バックアップから単一ノードを復元できます。そのことを気にせず、最後のバックアップ以降に削除が行われたと思われる場合は、上記のプロセスを実行する最後のバックアップの完全な復元を行う方が簡単です。


nodeテーブルに移動しても、削除されたNIDが表示されない場合はどうなりますか?これは物事が厳しいように見えることを意味しますか?ところで、サイトはDrupal 8です。
-MadPhysicist

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.