web-dev-qa-db-ja.com

削除したノードを復元することはできますか?

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

17
Palmin

データベースのバックアップがある場合(必要があります)、サイトの古いコピーを復元して、その方法で取得できます。

Drupalは、ノードの削除が最終であり、確認ダイアログがあることをユーザーに明確に警告します。

20
Chris Cohen

クリスの言うこと。 コード 読み取り

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

...削除されたということは本当に削除されたことを意味します。

このような事故を防ぐには、ユーザーの権限を制限して、ユーザーがノードを削除できないようにして、ノードのパブリッシュを解除できるようにします。未公開のノードはサイトに表示されません(サイトが正しく構築されている場合)が、データベースでは引き続き使用できます。

19
marcvangend

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

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

私は遅いですが、答えはエンティティバックアップモジュールを使用することです https://www.drupal.org/project/entity_backup

0
Rajveer gangwar

これは、@ marcvangendの回答をリバースエンジニアがクリスが言ったことに基づく提案です。私は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. ライブサイトで作業を確認してください

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

0
squarecandy