Come posso cancellare la cache usando una query SQL?


21

Dopo un aggiornamento del modulo, il mio sito è diventato inutilizzabile e mostra solo un messaggio di errore php. Ho provato a aggirare il problema drush cc, ma non è stato d'aiuto.

Ho anche provato con uno script php personalizzato ma che ha problemi a trovare il mio DRUPAL_ROOT

Voglio solo cancellare le tabelle della cache da Drupal 7 direttamente sul server mysql, ma non sono sicuro di quali tabelle debbano essere cancellate per questo e soprattutto quali non dovrei cancellare.

Devo solo cancellare tutti i [SITE-PREFIX_]cache*tavoli?


Potresti per favore aggiungere la query che hai usato?
ipwa,

in realtà stavo cercando una Query da usare con qualcosa del tipo: `VUOTO DOVE IL TABLAME È COME 'prefix_chache%' ma alla fine ho usato phpmyadmin per eliminare le tabelle perché non riuscivo a trovare una query del genere.
VOLA il

Proprio come una nota, assicurati di aver eseguito gli aggiornamenti del database tramite drush updbo dall'interfaccia di amministrazione o semplicemente andando /update.phpdopo un aggiornamento del modulo / core.
Beebee,

Risposte:


6

Qualsiasi modulo ben scritto che ha una cache, dovrebbe prefissarlo con cache, il che significa che la risposta alla tua domanda è "Sì".

Nel caso strano in cui un modulo memorizzi nella cache i dati da qualche altra parte, è possibile controllare i moduli per implementazioni di hook_flush_caches e vedere cosa rimuovono.


29

Sì, puoi semplicemente cancellare ( TRUNCATE) tutte le cache*tabelle.

Questo ha funzionato bene per me:

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;

Se usi drush, esegui drush sql-clie incolla quanto sopra.

Questi comandi potrebbero non cancellare tutte le tabelle della cache del sito specifico, ma possono aiutare a correggere alcuni errori. Successivamente puoi provare drush cc alla cancellare il resto.


1
È anche facile aggiungere ulteriori query TRUNCATE per eventuali tabelle cache_ aggiuntive che potrebbero essere presenti sul tuo sito.
milionarie,

11

Per cancellare tutte le tabelle della cache, eseguire questo comando nel terminale del server.

# 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

questo passerà attraverso tutte le tabelle della cache e le troncerà in un solo comando.


1
Funziona, testato e tutto è zero.
Marko Blazekovic,

1
Questo mi ha aiutato a riavviare un sito quando c'erano errori "Class not found" poco chiari.
user18099,

1
Grazie Mohammad, mi piace la tua soluzione one-liner meglio della risposta accettata, perché è più flessibile: il modello cattura anche le tabelle cache personalizzate / contrib, non solo le liste hardcoded.
Balu Ertl,

3

Puoi TRUNCARE / ELIMINARE ciascuna tabella separatamente che inizia cache_come:

DELETE FROM cache;
DELETE FROM cache_block;

e così via (controllare tramite drush sqlq "SHOW TABLES LIKE 'cache_%'").

Oppure genera una query con un elenco di tabelle e passa a drush per troncarle, ad esempio:

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

o:

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

Se stai usando memcached, devi anche svuotare le cache lì, ad esempio (sintassi di Bash):

echo flush_all > /dev/tcp/127.0.0.1/11211

0

Oppure puoi importare il tuo dump mysql con cache*tabelle già troncate :

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

0

drush cre / o drush cc alldovrebbe cancellare tutte le cache, ma in effetti alcune tabelle della cache non vengono cancellate. Il seguente comando (semplificato) tronca tutte le cache:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.