Чи можливо відновити видалений вузол?


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

Так, для цього є кілька рішень.

  • Перший - це використання резервних копій, про які вже згадував Кріс. це найскладніше, особливо якщо вузол містить складні поля.
  • Використання https://drupal.org/project/recover модуля, який контролює
  • Використання https://drupal.org/project/entity_soft_delete модуля. Він створив своєрідну переробку / кошик для вузлів / сутностей, тому коли певний вузол буде видалений, він не буде видалений з бази даних, лише його статус зміниться на видалений. Таким чином, адміністратор може все-таки бачити або навіть використовувати його, а якщо потрібно, змінити його статус на звичайний або назавжди видалити його

0

Ось пропозиція спирається на те, що Кріс сказав, що відповідь інженерів @ marcvangend відповідь. Мені подобається використовувати phpMyAdmin, але ви можете виконати цей самий процес з командним рядком, якщо вам це більше подобається.

Як і інші відповіді, це передбачає, що у вас є резервна копія вашої бази даних. Немає виправдання не з чудовими модулями, такими як резервне копіювання та міграція.

  1. Створіть нову порожню базу даних MySQL під назвою «відновити» чи «тестуючи» чи щось подібне
  2. Створіть нову резервну копію вручну, щоб ви могли повернутися до цього моменту, а не резервного копіювання минулої ночі, якщо вам потрібно
  3. Імпортуйте резервну копію в нову базу даних "відновити"
  4. Перейдіть до nodeтаблиці, знайдіть видалений вузол. Сподіваємось, ви знаєте нід, але якщо цього не зрозумієте зараз.
  5. Виберіть один рядок, який було видалено, та експортуйте через phpMyAdmin. Повинно бути лише один ряд.
  6. Тепер переходимо до node_revisionsстолу. Шукайте в ній видаленого вузла та експортуйте. Повинно бути хоча б один ряд, але може бути і більше. Експортуйте все разом із нідом.
  7. Поверніться до бази даних вашого веб-сайту в реальному часі в phpMyadmin
  8. Імпортуйте два файли, які ви щойно експортували, із резервної копії
  9. Перевірте свою роботу на живому сайті

Використання цього методу дозволить відновити один вузол із резервної копії, не втрачаючи жодних змін у базі даних після останньої резервної копії. Якщо вас це не турбує, і ви нічого не думаєте, але видалення відбулося з часу останньої резервної копії, було б простіше просто виконати повне відновлення останньої резервної копії, щоб пройти процес вище.


Що робити, якщо я заходжу до nodeстолу і не бачу видаленого ніда там? Це означає, що речі виглядають похмуро? На сайті Drupal 8, до речі.
MadPhysicist

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.