Можно ли восстановить удаленный узел?
Хотя ревизии сохраняются и легко вернуться к предыдущей редакции узла, мне было интересно, можно ли восстановить узел, который действительно был удален пользователем?
5 answers
Если у вас есть резервная копия базы данных (что вам необходимо;), вы можете восстановить старую копию сайта и получить ее таким образом.
Drupal действительно дает пользователям довольно четкое предупреждение о том, что удаление узла является окончательным, и есть диалоговое окно подтверждения.
Что говорит Крис. Код гласит
db_query('DELETE FROM {node} WHERE nid = %d', $node->nid);
db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid);
...так что удалено на самом деле означает удалено.
Чтобы предотвратить подобные инциденты, вы можете ограничить права пользователей, чтобы пользователи не могли удалять, а только отменять публикацию узлов. Неопубликованные узлы не будут отображаться на вашем сайте (при условии, что ваш сайт построен правильно), но они останутся доступными в базе данных.
Да, для этого есть несколько решений.
- Первый из них использует полные резервные копии, о которых уже упоминал здесь Крис. это самый сложный вариант, особенно если узел содержит сложные поля.
- Использование https://drupal.org/project/recover модуль, который контролирует
- Использование https://drupal.org/project/entity_soft_delete модуль. Он создал своего рода корзину/мусорную корзину для узлов/сущностей, поэтому, когда конкретный узел удаляется, он не будет удален из базы данных, только его статус изменится на удален. Таким образом, администратор все еще может видеть или даже использовать его, и при необходимости изменить его статус на нормальный или удалить навсегда
Вот предложение, основанное на том, что сказал Крис, что ответ реверсивных инженеров @marcvangend. Мне нравится использовать phpMyAdmin, но вы можете выполнить тот же процесс с помощью командной строки, если вам это больше нравится.
Как и в других ответах, это предполагает, что у вас есть резервная копия вашей базы данных. Нет оправдания, чтобы не использовать такие потрясающие модули, как резервное копирование и миграция.
- Создайте новую пустую базу данных MySQL под названием "восстановление" или "тестирование" или что-то подобное
- Создайте новый резервное копирование вручную, чтобы вы могли вернуться к этому моменту, а не к резервному копированию прошлой ночи, если вам нужно
- Импортируйте резервную копию в новую базу данных "восстановление"
- Перейдите в таблицу
node
, найдите свой удаленный узел. Надеюсь, вы знаете nid, но если вы не выясните это сейчас. - Выберите одну строку, которая была удалена, и экспортируйте ее через phpMyAdmin. Там должна быть только одна строка.
- Теперь перейдите к таблице
node_revisions
. Выполните поиск по nid вашего удаленного узла и экспортируйте. Там должен быть хотя бы один ссориться, но могло быть и больше. Экспортируйте все с помощью вашего nid. - Вернитесь в базу данных вашего живого сайта в phpMyAdmin
- Импортируйте два файла, которые вы только что экспортировали из резервной копии
- Проверьте свою работу на живом сайте
Использование этого метода позволит вам восстановить один узел из резервной копии без потери каких-либо изменений в базе данных с момента последней резервной копии. Если вас это не беспокоит и вы не думаете, что с момента последнего удаления произошло что-либо, кроме удаления резервное копирование, было бы проще просто выполнить полное восстановление последней резервной копии, чтобы выполнить описанный выше процесс.
Я есть.поздно, но ответ - использовать модуль резервного копирования сущностей https://www.drupal.org/project/entity_backup