it-swarm-vi.com

Có thể khôi phục một nút bị xóa?

Trong khi các bản sửa đổi được giữ và rất dễ để quay lại bản sửa đổi trước đó của một nút, tôi đã tự hỏi liệu có thể khôi phục một nút đã thực sự bị xóa bởi người dùng không?

17
Palmin

Nếu bạn có một bản sao lưu cơ sở dữ liệu (mà bạn nên;) bạn có thể khôi phục một bản sao cũ của trang web và truy xuất nó theo cách đó.

Drupal cung cấp cho người dùng một cảnh báo khá rõ ràng rằng việc xóa một nút là cuối cùng và có một hộp thoại xác nhận.

20
Chris Cohen

Chris nói gì. đọc

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

... Vì vậy, xóa thực sự có nghĩa là xóa.

Để ngăn ngừa tai nạn như thế này, bạn có thể muốn hạn chế quyền của người dùng để người dùng không thể xóa, nhưng chỉ các nút không được công bố. Các nút chưa được công bố sẽ không hiển thị trên trang web của bạn (giả sử rằng trang web của bạn được xây dựng chính xác) nhưng chúng vẫn có sẵn trong cơ sở dữ liệu.

19
marcvangend

Có một số giải pháp cho việc này.

  • Cái đầu tiên là sử dụng bản sao lưu đầy đủ đã được Chris đề cập ở đây. đây là điều khó nhất, đặc biệt nếu nút chứa các trường phức tạp.
  • Sử dụng https://drupal.org/project/recover mô-đun, theo dõi
  • Sử dụng https://drupal.org/project/entity_soft_delete mô-đun. Nó đã tạo ra một loại rác/thùng rác cho các nút/thực thể để khi một nút cụ thể bị xóa, nó sẽ không bị xóa khỏi cơ sở dữ liệu mà chỉ trạng thái của nó thay đổi thành bị xóa. Vì vậy, quản trị viên vẫn có thể nhìn thấy hoặc thậm chí sử dụng nó và nếu được yêu cầu thay đổi trạng thái trở lại bình thường hoặc xóa vĩnh viễn
2
Sina Salek

Tôi là.late, nhưng câu trả lời là sử dụng mô đun sao lưu thực thể https://www.drupal.org/project/entity_backup

0
Rajveer gangwar

Đây là một gợi ý dựa trên những gì Chris nói rằng câu trả lời của các kỹ sư đảo ngược @ marcvangend. Tôi thích sử dụng phpMyAdmin, nhưng bạn có thể thực hiện quy trình tương tự với dòng lệnh nếu bạn thích điều đó tốt hơn.

Giống như các câu trả lời khác, điều này giả sử bạn có một bản sao lưu cơ sở dữ liệu của mình. Không có lý do gì để không với các mô-đun tuyệt vời như Sao lưu & Di chuyển ra khỏi đó.

  1. Tạo một cơ sở dữ liệu MySQL trống mới có tên là "khôi phục" hoặc "thử nghiệm" hoặc một cái gì đó tương tự
  2. Tạo bản sao lưu thủ công mới để bạn có thể quay lại thời điểm này, không phải bản sao lưu tối qua nếu bạn cần
  3. Nhập bản sao lưu của bạn vào cơ sở dữ liệu "khôi phục" mới
  4. Chuyển đến bảng node, tìm kiếm nút đã xóa của bạn. Hy vọng rằng bạn biết nid, nhưng nếu bạn không tìm ra nó bây giờ.
  5. Chọn một hàng đã bị xóa và xuất qua phpMyAdmin. Chỉ nên có một hàng.
  6. Bây giờ đi đến node_revisions bàn. Tìm kiếm trên nid của nút bị xóa của bạn và xuất. Nên có ít nhất một hàng, nhưng có thể nhiều hơn. Xuất tất cả mọi thứ với nid của bạn.
  7. Quay trở lại cơ sở dữ liệu trang web trực tiếp của bạn bằng phpMyadmin
  8. Nhập hai tệp bạn vừa xuất từ ​​bản sao lưu
  9. Kiểm tra công việc của bạn trên trang web trực tiếp

Sử dụng phương pháp này sẽ cho phép bạn khôi phục nút đơn từ bản sao lưu mà không mất bất kỳ thay đổi nào đối với cơ sở dữ liệu kể từ lần sao lưu cuối cùng. Nếu bạn không quan tâm đến điều đó và bạn không nghĩ gì khác ngoài việc xóa đã xảy ra kể từ lần sao lưu cuối cùng, việc khôi phục hoàn toàn bản sao lưu cuối cùng sẽ trải qua quá trình trên sẽ dễ dàng hơn.

0
squarecandy