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

18

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

Palmin
источник

Ответы:

20

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

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

Крис Коэн
источник
19

Что говорит Крис Код читает

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

... так удалено действительно означает удалено.

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

marcvangend
источник
6
Дополнительный совет: для отдельной вкладки и большего контроля над тем, кто может что-то отменить
marcvangend
2

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

  • Первый использует полные резервные копии, которые Крис уже упоминал здесь. это самый сложный, особенно если узел содержит сложные поля.
  • Использование https://drupal.org/project/recover модуля, который отслеживает
  • Использование https://drupal.org/project/entity_soft_delete модуля. Он создал своего рода корзину / мусорную корзину для узлов / сущностей, поэтому при удалении определенного узла он не будет удален из базы данных, только его статус будет изменен на удаленный. Таким образом, администратор все еще может видеть или даже использовать его и при необходимости изменить его статус на нормальный или удалить его навсегда
Сина Салек
источник
0

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

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

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

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

squarecandy
источник
Что если я захожу в nodeтаблицу и не вижу там удаленный nid? Значит ли это, что все выглядит мрачно? Сайт Drupal 8, кстати.
MadPhysicist