Можно ли восстановить удаленный узел?


Хотя ревизии сохраняются и легко вернуться к предыдущей редакции узла, мне было интересно, можно ли восстановить узел, который действительно был удален пользователем?

Author: kiamlaluno, 2011-03-11

5 answers

Если у вас есть резервная копия базы данных (что вам необходимо;), вы можете восстановить старую копию сайта и получить ее таким образом.

Drupal действительно дает пользователям довольно четкое предупреждение о том, что удаление узла является окончательным, и есть диалоговое окно подтверждения.

 20
Author: Chris Cohen, 2011-03-11 09:36:39

Что говорит Крис. Код гласит

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

...так что удалено на самом деле означает удалено.

Чтобы предотвратить подобные инциденты, вы можете ограничить права пользователей, чтобы пользователи не могли удалять, а только отменять публикацию узлов. Неопубликованные узлы не будут отображаться на вашем сайте (при условии, что ваш сайт построен правильно), но они останутся доступными в базе данных.

 19
Author: marcvangend, 2011-03-11 09:47:10

Да, для этого есть несколько решений.

  • Первый из них использует полные резервные копии, о которых уже упоминал здесь Крис. это самый сложный вариант, особенно если узел содержит сложные поля.
  • Использование https://drupal.org/project/recover модуль, который контролирует
  • Использование https://drupal.org/project/entity_soft_delete модуль. Он создал своего рода корзину/мусорную корзину для узлов/сущностей, поэтому, когда конкретный узел удаляется, он не будет удален из базы данных, только его статус изменится на удален. Таким образом, администратор все еще может видеть или даже использовать его, и при необходимости изменить его статус на нормальный или удалить навсегда
 2
Author: Sina Salek, 2014-06-13 11:39:44

Вот предложение, основанное на том, что сказал Крис, что ответ реверсивных инженеров @marcvangend. Мне нравится использовать phpMyAdmin, но вы можете выполнить тот же процесс с помощью командной строки, если вам это больше нравится.

Как и в других ответах, это предполагает, что у вас есть резервная копия вашей базы данных. Нет оправдания, чтобы не использовать такие потрясающие модули, как резервное копирование и миграция.

  1. Создайте новую пустую базу данных MySQL под названием "восстановление" или "тестирование" или что-то подобное
  2. Создайте новый резервное копирование вручную, чтобы вы могли вернуться к этому моменту, а не к резервному копированию прошлой ночи, если вам нужно
  3. Импортируйте резервную копию в новую базу данных "восстановление"
  4. Перейдите в таблицу node, найдите свой удаленный узел. Надеюсь, вы знаете nid, но если вы не выясните это сейчас.
  5. Выберите одну строку, которая была удалена, и экспортируйте ее через phpMyAdmin. Там должна быть только одна строка.
  6. Теперь перейдите к таблице node_revisions. Выполните поиск по nid вашего удаленного узла и экспортируйте. Там должен быть хотя бы один ссориться, но могло быть и больше. Экспортируйте все с помощью вашего nid.
  7. Вернитесь в базу данных вашего живого сайта в phpMyAdmin
  8. Импортируйте два файла, которые вы только что экспортировали из резервной копии
  9. Проверьте свою работу на живом сайте

Использование этого метода позволит вам восстановить один узел из резервной копии без потери каких-либо изменений в базе данных с момента последней резервной копии. Если вас это не беспокоит и вы не думаете, что с момента последнего удаления произошло что-либо, кроме удаления резервное копирование, было бы проще просто выполнить полное восстановление последней резервной копии, чтобы выполнить описанный выше процесс.

 0
Author: squarecandy, 2015-06-11 19:58:08

Я есть.поздно, но ответ - использовать модуль резервного копирования сущностей https://www.drupal.org/project/entity_backup

 0
Author: Rajveer gangwar, 2017-03-31 21:34:29