Tabel mana yang aman untuk dihapus?

40

Saya telah mewarisi situs klien yang memiliki basis data sangat besar tanpa alasan. Ada jumlah konten yang moderat dan modul yang diaktifkan sangat sedikit. Namun, database terlalu besar untuk bergerak dengan mudah dan saya ingin membersihkannya.

Saya telah membersihkan tabel cache standar, syslog dan accesslog.

Apakah ada tabel lain yang dapat saya potong dengan aman di situs Drupal standar?

Nigel Waters
sumber
1
Anda dapat mengurutkan tabel berdasarkan ukurannya di phpmyadmin. Coba itu dan kemudian lihat tabel mana yang terbesar dan laporkan di sini. Saya misalnya telah melihat tabel sesi besar yang tidak dibersihkan karena alasan tertentu. Itu adalah sesuatu yang dapat Anda hapus jika Anda dapat hidup dengan pengguna yang harus masuk lagi (dan mungkin kehilangan data formulir yang dimasukkan jika ada di situs, sehingga Anda mungkin ingin mengoordinasikan ini dengan pengguna)
Berdir
Hanya catatan tambahan di sana, bahwa semua jawaban di bawah yang menyebutkan pemotongan {cache_form}tidak sepenuhnya benar. Ini bukan tabel cache yang sebenarnya. Ini berisi dalam pengiriman formulir kemajuan. Jika Anda menghapus semua data dalam tabel ini, pengguna Anda mungkin kehilangan data. Hal yang tepat untuk dilakukan dengan tabel ini adalah untuk kedaluwarsa entri.
mpdonadio

Jawaban:

21

Gunakan modul cadangan & migrasi , ia datang dengan standar yang baik untuk melewatkan data yang tidak perlu . Secara default menghasilkan cadangan DB tanpa cache, pengawas dan beberapa tabel lainnya.

Jika ini tidak membantu, coba lihat dengan phpMyAdmin dan beri tahu kami tabel mana yang memiliki banyak entri.

BetaRide
sumber
1
Ini adalah tempat pertama saya pergi. Namun, database lebih dari satu pertunjukan dan tidak akan mencadangkan melalui metode ini. Tujuan saya adalah menghapus database sehingga saya dapat menggunakan cadangan dan bermigrasi secara teratur. Pada dasarnya saya bertanya-tanya apakah ada tabel lagi yang bisa saya hapus (yang tidak secara default dilewati oleh BAM).
Nigel Waters
Jika Anda memiliki akses baris perintah, Anda dapat menggunakan drush untuk memulai pencadangan dan migrasi. Atau akses mysql pada baris perintah (contoh: mysqldump --host = your.host.com --user = db_user --compress --password your_pw> dump.sql) Dengan cara ini Anda tidak akan mengalami timeout. Secara umum membersihkan tanpa cadangan tidak sangat menghemat. Anda dapat dengan mudah berakhir dengan halaman yang rusak dan tidak ada cara untuk kembali.
BetaRide
Masalahnya bukan pada batas waktu. Saya tahu saya dapat dengan mudah menjalankan backup melalui ssh / drush. Saya ingin membersihkan database karena telah melihat banyak orang selama beberapa tahun terakhir dan ada banyak crud yang tidak perlu di sana. Saya hanya perlu tahu tabel mana yang dapat saya hapus dengan aman, (tidak tahu cara membuat cadangan atau memindahkan situs saya).
Nigel Waters
@BetaRide benar, yang default yang tidak termasuk BAM adalah yang aman. Yang lain mungkin atau mungkin tidak memiliki data aktual.
mpdonadio
22

Drupal 7 tabel yang dapat dikecualikan

Berikut adalah daftar tabel di Drupal 7 yang dapat Anda hapus (untuk mengurangi ukuran basis data) atau dengan aman dikecualikan untuk melakukan migrasi (seperti pada pertanyaan tentang Bagaimana mengurangi ukuran basis data yang diekspor secara lokal untuk menyiasati batas impor server saya? ):

  • accesslog
  • batch
  • semua tabel yang berhubungan dengan cache, seperti:
    • cache *
    • cache_block
    • cache_content
    • cache_filter *
    • cache_form
    • cache_calendar_ical
    • cache_menu *
    • cache_page *
    • cache_views
    • * _cache, seperti features_cache atau views_data_object_export_cache
  • ctools_views_cache
  • ctools_object_cache
  • devel_queries
  • devel_times
  • banjir
  • sejarah
  • antre
  • berbagai tabel search_ *, seperti:
    • search_dataset
    • search_index
    • search_keywords_log
    • search_total
  • tiang sinyal
  • sesi
  • penjaga
  • webform_submitted_data

Biasanya tabel seperti search_indexdan watchdogmenggunakan banyak ruang basis data, jadi menghilangkan 2 tabel itu saja sudah bisa membuat perbedaan besar.

Tabel lain yang mungkin dikecualikan

Periksa ukuran tabel Anda yang tersisa dan tentukan yang mana yang paling besar.

Biasanya Anda mungkin menemukan tabel sesi yang tidak memiliki prosedur pembersihan. Tabel seperti itu Anda mungkin juga bisa mengecualikan.

Modul Cadangan dan Migrasi

Untuk lebih mengurangi tantangan sebagaimana dirinci dalam " Bagaimana cara mengurangi ukuran basis data yang diekspor secara lokal untuk mengatasi batas impor server saya? ", Lihat juga modul Cadangan dan Migrasi . Berikut adalah kutipan dari halaman proyeknya (marka tebal ditambahkan di sini):

Cadangkan dan pulihkan database Drupal MySQL Anda, kode, dan file atau migrasi situs antar lingkungan. Cadangan dan Migrasi mendukung kompresi gzip, bzip dan zip serta cadangan terjadwal otomatis.

Dengan Cadangan dan Migrasi Anda dapat membuang beberapa atau semua tabel basis data Anda ke unduhan file atau menyimpan ke file di server atau di luar lokasi, dan untuk memulihkan dari dump basis data yang diunggah atau disimpan sebelumnya. Anda dapat memilih tabel mana dan data apa yang akan dicadangkan dan disimpan dalam cache secara default .

Dan ada lebih banyak lagi: jika lingkungan lokal Anda (mis. Menang atau Mac) berbeda dari OS yang server situs web Anda jalankan (seperti Linux), maka perbedaan antara OS ini menyiratkan potensi tantangan tambahan. Saya memiliki pengalaman yang baik dengan modul Cadangan dan Migrasi di antara OS yang berbeda, yang tidak menyebabkan masalah (berfungsi dengan baik) dalam situasi di mana ekspor / impor MySql gagal sebelumnya.

Pierre
sumber
Bagus untuk ditambahkan bahwa tabel apa pun dengan cache_prepended atau _cacheappend juga aman untuk dipotong, seperti features_cacheatau lainnya views_data_object_export_cache.
Beebee
1
Word of waring, data tabel pencarian dapat dikecualikan, tetapi mungkin butuh waktu yang sangat, sangat lama untuk membangun kembali indeks di situs besar. Menilai ini berdasarkan kasus per basis.
mpdonadio
2
Juga, kutipan B&M tentang data yang di-cache sedikit salah. Saat diaktifkan di situs, itu akan mengecualikan tabel cache. Namun, jika Anda menambahkan modul setelah B&M diatur, tabel cache mungkin tidak ditambahkan ke daftar data yang dikecualikan. Saya telah melihat ini terjadi berkali-kali, biasanya ketika saya mengganti pengaturan pada profil default.
mpdonadio
@MPD: terima kasih atas umpan balik yang menarik ini (belum tahu tentang itu!). Tentang tabel pencarian: titik valid. Namun secara pribadi saya selalu menggunakan pendekatan pembangunan kembali: ini membantu mengatasi batasan dan memastikan indeks cocok dengan konten aktual dalam target. Tentang komentar kedua Anda: kutipannya adalah cut-and-past dari halaman proyek, jadi mungkin Anda ingin mengajukan masalah tentang hal itu dalam antrian masalahnya (Drupal.SE bukan tempat untuk melaporkan bug, dll, kan?) .
Pierre.Vriens
@ Pierre.Vriens Mencocokkan konten tidak masalah, dengan asumsi Anda menjalankan cron dan memastikan pengindeksan terjadi. B&M, cukup yakin itu adalah masalah yang diketahui. Juga, bagian tentang data sesi tidak 100% benar. Tabel itu menjadi besar karena waktu sesi default adalah sekitar tiga minggu; _drupal_session_garbage_collectionakan menjaga meja tetap rapi, berdasarkan pengaturan sistem.
mpdonadio
19

Dalam pengalaman saya, saya membersihkan semua tabel "cache_ *".

  • ditambah "anjing penjaga" jika saya tidak peduli dengan log Drupal yang lalu
  • ditambah "accesslog" jika saya tidak peduli dengan pengguna yang masuk
  • ditambah "pencarian" jika saya tidak peduli tentang isi node yang diindeks
thePanz
sumber
1
Sama di sini, saya juga sesi.
Alex Weber
2
Catatan untuk siapa pun yang mencoba ini: Buat cadangan terlebih dahulu. Dan jangan Jatuhkan tabel, melainkan Kosong atau Potong.
timofey.com
9

Saya terkadang menjalankan SQL ini untuk mengawasi pertumbuhan tabel-tabel teratas:

SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =  'yourdbnamehere'
ORDER BY table_rows DESC 
kamu
sumber
Kolom apa yang harus saya periksa untuk pertumbuhan?, Maksud Anda TABLE_ROWS
Bala
8

Watchdog dan sesi juga dapat dihapus, perlu diingat bahwa semua pengguna akan keluar.

Attik
sumber
6

Dengan mySQL Anda dapat melakukan hal-hal menyenangkan dengan program mysqldump untuk mengekspor database secara keseluruhan atau sebagian. Misalnya ini hanya mengekspor struktur:

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --no-data dbname > ~/dbname.sql

Anda kemudian dapat menggunakan opsi 'abaikan tabel' untuk mengekspor data lebih lanjut, mis

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --ignore-table=dbname.huge_table --ignore-table=dbname.massive_table --ignore-table=dbname.useless_table some_host >> ~/dbname.sql

Itu menempatkan data di akhir file sebelumnya mengabaikan beberapa tabel besar.

Jika kemudian Anda membutuhkan tabel besar-besaran maka Anda dapat mengekspornya ke file lain menggunakan pendekatan di atas, Anda kemudian dapat mengimpornya dalam potongan (meskipun fk check off mungkin diperlukan).

Anda melakukan gzip file Anda sebelum mengunggah, atau itu pertanyaan konyol?

Kucing Henry
sumber
5

Gunakan modul OptimizeDB untuk membersihkan tabel cache. The Administrasi Database ini juga membantu.

Jangan lupa untuk memiliki cadangan basis data.

M ama D
sumber
database sekarang 14Mo, saya menggunakan OptimizeDB, Thak you again
Mitch
@ Nyonya, terima kasih
M ama D
2

tidak super ahli ini tetapi berbagi pengalaman saya ... jika Anda tidak menggunakan cadangan dan modul bermigrasi dan secara manual ekspor mereka beberapa tabel Anda bisa mengosongkan / truncate akan watchdog, cache, cache_menu, cache_block, cache_content, cache_formkarena mereka mungkin mengandung besar jumlah kliring cached yang saya kira tidak akan sakit ... tapi sekali lagi ini adalah pengalaman saya dan saya belum pernah mengalami masalah atau kehilangan data karena hal ini.

optimusprime619
sumber
2

Beberapa ide:

  • Pendekatan yang sama sekali berbeda adalah membuat umpan RSS menggunakan tampilan data yang ingin Anda simpan. Kemudian buat instalasi Drupal baru dan impor data ini dengan Feed API .
  • Dan hanya pendekatan lain: Pekerjakan seorang siswa dan biarkan dia mentransfer data secara manual ke instalasi baru Anda.
  • Atau yang ini: Ceritakan lebih lanjut tentang tabel apa yang sangat besar dan apa alasannya (jika Anda tahu).
BetaRide
sumber
2

Periksa example.drushrc.phpdaftar mana ini:

$options['structure-tables']['common'] = array('cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog');
$options['skip-tables']['common'] = array('migration_*');

Aman untuk menghapusnya dalam hal memindahkan basis data antara lingkungan yang berbeda (terutama ketika Anda bekerja dengan basis data besar ). Namun Anda masih perlu memahami apa yang Anda kliring.

kenorb
sumber
1

Tabel tambahan yang dapat dihapus:

  • batch
  • webform_submitted_data

Hal-hal lain yang mungkin memakan cukup banyak ruang: - Versi lama dari konten Anda (tidak mungkin dibersihkan dengan truncate sederhana). - locales_source dan locales_target. Jika Anda memiliki bahasa yang tidak digunakan lagi atau merangkai terjemahan untuk modul yang tidak Anda gunakan lagi. Tabel-tabel ini sepertinya tidak pernah dibersihkan.

fietserwin
sumber