Bagaimana cara menghapus cache menggunakan query SQL?

21

Setelah pembaruan modul, situs saya menjadi tidak dapat digunakan, dan hanya menampilkan pesan kesalahan php. Saya mencoba menghindari masalah dengan drush cc, tetapi itu tidak membantu.

Juga mencoba dengan skrip php khusus tetapi mengalami masalah dalam menemukan DRUPAL_ROOT

Saya hanya ingin menghapus tabel cache dari Drupal 7 langsung di server mysql, tapi saya tidak yakin tabel mana yang harus dibersihkan untuk itu dan terutama yang tidak boleh saya hapus.

Apakah saya hanya perlu menghapus semua [SITE-PREFIX_]cache*tabel?

TERBANG
sumber
Bisakah Anda menambahkan kueri yang Anda gunakan?
ipwa
sebenarnya saya sedang mencari Query untuk digunakan dengan sesuatu seperti: `KOSONG DI MANA tablename SEPERTI 'prefix_chache%' tetapi pada akhirnya saya hanya menggunakan phpmyadmin untuk menjatuhkan tabel karena saya tidak dapat menemukan permintaan seperti itu.
FLY
Sama seperti catatan, pastikan Anda telah menjalankan pembaruan basis data baik melalui drush updbatau dari antarmuka admin, atau hanya dengan pergi /update.phpsetelah pembaruan modul / inti.
Beebee

Jawaban:

6

Setiap modul yang ditulis dengan baik yang memiliki cache, harus mengawali dengan cache, yang berarti bahwa jawaban untuk pertanyaan Anda adalah "Ya".

Dalam kejadian aneh dimana modul menyimpan data di tempat lain, Anda dapat memeriksa modul Anda untuk implementasi hook_flush_caches , dan lihat apa yang mereka hapus.

Letharion
sumber
29

Ya, Anda bisa menghapus ( TRUNCATE) semua cache*tabel.

Ini bekerja dengan baik untuk saya:

TRUNCATE TABLE cache;
TRUNCATE TABLE cache_block;
TRUNCATE TABLE cache_bootstrap;
TRUNCATE TABLE cache_field;
TRUNCATE TABLE cache_filter;
TRUNCATE TABLE cache_form;
TRUNCATE TABLE cache_image;
TRUNCATE TABLE cache_menu;
TRUNCATE TABLE cache_page;
TRUNCATE TABLE cache_path;
TRUNCATE TABLE cache_token;
TRUNCATE TABLE cache_update;

Jika Anda menggunakan drush, jalankan drush sql-clidan rekatkan di atas di sana.

Perintah-perintah ini mungkin tidak menghapus semua tabel cache dari situs spesifik Anda tetapi dapat membantu memperbaiki beberapa kesalahan. Setelah itu Anda dapat mencoba drush cc allmenghapus sisanya.

keuangan fifi
sumber
1
Juga mudah untuk menambahkan kueri TRUNCATE tambahan untuk setiap tabel cache_ tambahan yang mungkin ada di situs Anda.
millionleaves
11

Untuk menghapus semua tabel cache jalankan perintah ini di terminal server Anda.

# Truncate cache tables in MySQL regardless of the active cache backend
echo "SHOW TABLES LIKE 'cache%'" | $(drush sql-connect) | tail -n +2 | xargs -L1 -I% echo "TRUNCATE TABLE %;" | $(drush sql-connect) -v

ini akan mengulang semua tabel cache dan memotongnya dalam satu perintah.

Mohammad AlQanneh
sumber
1
Ini bekerja, mengujinya dan semuanya nol.
Marko Blazekovic
1
Ini membantu saya menjalankan situs lagi ketika ada kesalahan "Kelas tidak ditemukan" yang tidak jelas.
user18099
1
Terima kasih Mohammad, saya menyukai solusi one-liner Anda lebih baik daripada jawaban yang diterima, karena lebih fleksibel: polanya menangkap tabel cache custom / contrib juga, tidak hanya daftar yang berisi kode keras.
Balu Ertl
3

Anda dapat TRUNCATE / DELETE setiap tabel secara terpisah yang dimulai dari cache_seperti:

DELETE FROM cache;
DELETE FROM cache_block;

dan sebagainya (periksa via drush sqlq "SHOW TABLES LIKE 'cache_%'").

Atau hasilkan kueri dengan daftar tabel dan masukkan ke drush untuk memotongnya, misalnya:

echo "SHOW TABLES LIKE 'cache%'" | $(drush sql-connect) | tail -n +2 | xargs -L1 -I% echo "DELETE FROM %;" | $(drush sql-connect) -v

atau:

echo "SELECT CONCAT('DELETE FROM ', GROUP_CONCAT(TABLE_NAME SEPARATOR ';DELETE FROM ') , ' cache;' ) AS statement FROM information_schema.TABLES WHERE TABLE_NAME LIKE 'cache_%'" | drush sqlc --extra=--skip-column-names | drush sqlc

Memcache

Jika Anda menggunakan memcached, Anda juga perlu membilas cache di sana, mis. (Sintaks Bash):

echo flush_all > /dev/tcp/127.0.0.1/11211
kenorb
sumber
0

Atau, Anda dapat mengimpor dump mysql Anda dengan cache*tabel yang sudah terpotong :

gunzip -c ~/database.sql.gz | grep -v 'INSERT INTO `cache'| mysql --user=root drupal
mrded
sumber
0

drush crdan / atau drush cc allseharusnya menghapus semua cache, tetapi memang beberapa tabel cache tidak dihapus. Perintah berikut (disederhanakan) tidak memotong semua cache:

drush sql-query "SHOW TABLES LIKE 'cache%'" | while read table; do drush sql-query "TRUNCATE $table"; done;
Vagelis Prokopiou
sumber