SQL sorgusu kullanarak önbelleği nasıl temizlerim?


21

Bir modül güncellemesinden sonra sitem kullanılamaz hale geldi ve sadece bir php hata mesajı gösteriyor. Sorunu aşmaya çalıştım drush cc, ama bu işe yaramadı.

Ayrıca özel bir php betiği ile denedim ama bu benim bulma sorunları DRUPAL_ROOT

Sadece Drupal 7'deki önbellek tablolarını doğrudan mysql sunucusundan temizlemek istiyorum, ama bunun için hangi tabloların temizlenmesi gerektiğinden ve özellikle de temizlememem gerektiğinden emin değilim.

Tüm [SITE-PREFIX_]cache*masaları temizlememe gerek var mı?


Lütfen kullandığınız sorguyu ekler misiniz?
ipwa

Aslında şöyle bir şey kullanmak için bir Sorgu arıyordum: 'EMPTY NEREDE tablename is LIKE' prefix_chache% 'ama sonunda sadece böyle bir sorgu bulamadığım için tabloları bırakmak için phpmyadmin kullandım.
FLY

Tıpkı bir not olarak, veritabanı güncellemelerini drush updbyönetici arayüzünden veya yönetici arayüzünden veya /update.phpbir modül / çekirdek güncellemesinden sonra devam ederek çalıştırdığınızdan emin olun .
Beebee

Yanıtlar:


6

Önbelleği olan herhangi bir iyi yazılmış modül, önbellek ile öneki olmalıdır, yani sorunuzun cevabı "Evet" demektir.

Bir modülün başka bir yerde verileri önbelleğe alması garip bir durumda, modüllerinizi hook_flush_caches uygulamaları için kontrol edebilir ve ne kaldırdıklarını görebilirsiniz.


29

Evet, TRUNCATEtüm cache*tabloları basitçe temizleyebilirsiniz ( ) .

Bu benim için iyi çalıştı:

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;

Sarhoş kullanıyorsanız drush sql-cli, yukarıdakileri çalıştırın ve yapıştırın.

Bu komutlar, sitenizin tüm önbellek tablolarını temizlemeyebilir, ancak bazı hataların düzeltilmesine yardımcı olabilir. Daha sonra drush cc allgerisini temizlemeyi deneyebilirsiniz .


1
Sitenizde bulunabilecek ek cache_ tabloları için ekstra TRUNCATE sorguları eklemek de kolaydır.
milyonlar

11

Tüm önbellek tablolarını silmek için bu komutu sunucu terminalinizde çalıştırın.

# 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

bu, tüm önbellek tablolarında dolaşacak ve tek bir komutla bunları kesecektir.


1
Bu işe yarıyor, test ediyor ve hepsi sıfır.
Marko Blazekovic

1
Bu bana "Sınıf bulunamadı" hataları belirsiz olduğunda tekrar çalışan bir site almak bana yardımcı oldu.
user18099,

1
Teşekkürler Mohammad, tek linerli çözümünüzü kabul edilen yanıttan daha çok seviyorum, çünkü daha esnek: desen yalnızca kodlanmış listeleri değil, özel / önbellek tablolarını da yakalar.
Balu Ertl

3

İstediğiniz cache_gibi başlayan her bir tabloyu ayrı olarak TRUNCATE / DELETE yapabilirsiniz :

DELETE FROM cache;
DELETE FROM cache_block;

ve benzeri (kontrol edin drush sqlq "SHOW TABLES LIKE 'cache_%'").

Veya tablo listesini içeren bir sorgu oluşturun ve bunları kısaltmak için drush'a girin, örneğin:

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

veya:

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

Eğer memcached kullanıyorsanız, oradaki önbellekleri de temizlemeniz gerekir, örneğin: (Bash sözdizimi):

echo flush_all > /dev/tcp/127.0.0.1/11211

0

Veya, zaten kesilmiş cache*tablolarla mysql dump dosyasını içe aktarabilirsiniz :

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

0

drush crve / veya drush cc alltüm önbellekleri temizlemesi gerekiyor, ancak gerçekten de bazı önbellek tabloları temizlenmiyor. Aşağıdaki (basitleştirilmiş) komutu, tüm önbellekleri keser:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.