it-swarm-id.com

Apakah mungkin untuk mengembalikan simpul yang dihapus?

Sementara revisi disimpan dan mudah untuk kembali ke revisi node sebelumnya, saya bertanya-tanya apakah mungkin untuk mengembalikan node yang benar-benar telah dihapus oleh pengguna?

17
Palmin

Jika Anda memiliki cadangan basis data (yang seharusnya;), Anda dapat mengembalikan salinan lama situs dan mengambilnya dengan cara itu.

Drupal memberi peringatan yang jelas kepada pengguna bahwa menghapus suatu simpul adalah final, dan ada dialog konfirmasi.

20
Chris Cohen

Apa kata Chris. Kode berbunyi

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

... jadi dihapus benar-benar berarti dihapus.

Untuk mencegah kecelakaan seperti ini, Anda mungkin ingin membatasi izin pengguna sehingga pengguna tidak dapat menghapus, tetapi hanya membatalkan publikasi node. Node yang tidak diterbitkan tidak akan muncul di situs Anda (dengan anggapan bahwa situs Anda dibuat dengan benar) tetapi mereka tetap tersedia dalam database.

19
marcvangend

Ya ada beberapa solusi untuk ini.

  • Yang pertama menggunakan backup penuh yang telah disebutkan oleh Chris di sini. ini adalah yang paling sulit khususnya jika node berisi bidang yang kompleks.
  • Menggunakan https://drupal.org/project/recover modul, yang memonitor
  • Menggunakan https://drupal.org/project/entity_soft_delete modul. Itu dibuat semacam recycle/trashbin untuk node/entitas sehingga ketika node tertentu dihapus, itu tidak akan dihapus dari database hanya statusnya berubah menjadi dihapus. Jadi admin masih dapat melihat atau bahkan menggunakannya dan jika diperlukan ubah statusnya kembali normal atau hapus secara permanen
2
Sina Salek

Saya setuju, tetapi jawabannya adalah menggunakan modul cadangan entitas https://www.drupal.org/project/entity_backup

0
Rajveer gangwar

Berikut adalah saran yang membangun tentang apa yang dikatakan Chris sebagai jawaban reverse engineer @ marcvangend. Saya suka menggunakan phpMyAdmin, tetapi Anda dapat melakukan proses yang sama dengan baris perintah jika Anda suka itu lebih baik.

Seperti jawaban lain, ini mengasumsikan Anda memiliki cadangan database Anda. Tidak ada alasan untuk tidak menggunakan modul yang luar biasa seperti Backup & Migrate di luar sana.

  1. Buat database MySQL kosong baru yang disebut "restore" atau "testing" atau yang serupa
  2. Buat cadangan manual baru sehingga Anda dapat kembali ke saat ini, bukan cadangan tadi malam jika perlu
  3. Impor cadangan Anda ke dalam database "pemulihan" yang baru
  4. Buka tabel node, cari simpul yang dihapus. Semoga Anda tahu nid, tetapi jika Anda tidak mengetahuinya sekarang.
  5. Pilih satu baris yang telah dihapus dan ekspor melalui phpMyAdmin. Seharusnya hanya ada satu baris.
  6. Sekarang pergi ke node_revisions meja. Cari di ujung simpul yang dihapus dan ekspor. Setidaknya harus ada satu baris, tetapi bisa lebih. Ekspor semuanya dengan id Anda.
  7. Kembali ke database situs langsung Anda di phpMyadmin
  8. Impor dua file yang baru saja Anda ekspor dari cadangan
  9. Periksa pekerjaan Anda di situs langsung

Dengan menggunakan metode ini, Anda dapat memulihkan satu simpul dari cadangan tanpa kehilangan perubahan apa pun pada basis data sejak cadangan terakhir. Jika Anda tidak khawatir tentang itu dan Anda tidak memikirkan apa pun kecuali penghapusan telah terjadi sejak cadangan terakhir, akan lebih mudah untuk hanya melakukan pemulihan penuh dari cadangan terakhir untuk menjalani proses di atas.

0
squarecandy