web-dev-qa-db-fra.com

Comment effacer le cache à l'aide d'une requête SQL?

Après une mise à jour du module, mon site est devenu inutilisable et n'affiche qu'un message d'erreur php. J'ai essayé de contourner le problème avec drush cc, mais cela n'a pas aidé.

Également essayé avec un script php personnalisé mais qui a des problèmes pour trouver mon DRUPAL_ROOT

Je veux juste effacer les tables de cache de Drupal 7 directement sur le serveur mysql, mais je ne sais pas quelles tables devraient être effacées pour cela et surtout ce que je ne devrais pas effacer.

Dois-je simplement effacer tous les [SITE-PREFIX_]cache* les tables?

23
FLY

Tout module bien écrit qui a un cache doit le préfixer avec cache, ce qui signifie que la réponse à votre question est "Oui".

Dans le cas étrange où un module met en cache des données ailleurs, vous pouvez vérifier vos modules pour les implémentations de hook_flush_caches , et voir ce qu'ils suppriment.

6
Letharion

Oui, vous pouvez simplement effacer (TRUNCATE) tout cache* les tables.

Cela a bien fonctionné pour moi:

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;

Si vous utilisez drush, exécutez drush sql-cli et collez ce qui précède là-dedans.

Ces commandes peuvent ne pas effacer toutes les tables de cache de votre site spécifique, mais elles peuvent aider à corriger certaines erreurs. Ensuite, vous pouvez essayer drush cc all pour effacer le reste.

32
kqw

Pour effacer toutes les tables de cache, exécutez cette commande dans votre terminal serveur.

# 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

cela parcourra toutes les tables de cache et les tronquera en une seule commande.

11
Mohammad AlQanneh

Vous pouvez soit TRUNCATE/DELETE chaque table séparément qui commence à partir de cache_ comme:

DELETE FROM cache;
DELETE FROM cache_block;

et ainsi de suite (vérifiez via drush sqlq "SHOW TABLES LIKE 'cache_%'").

Ou générer une requête avec une liste de tables et passer en drush pour les tronquer, par exemple:

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

ou:

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

Si vous utilisez memcached, vous devez également vider les caches, par exemple (Syntaxe Bash):

echo flush_all > /dev/tcp/127.0.0.1/11211
3
kenorb

Ou, vous pouvez importer votre vidage mysql avec des tables cache* Déjà tronquées:

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

JFR dans cet article, une autre solution flexible basée sur des modèles est proposée sous forme de requête SQL brute, mais ne fonctionnait pas aussi bien que celle de Mohammad: https://thebarton.org/clear-drupal-cache -sql-query /

0
Balu Ertl

drush cr et/ou drush cc all est censé effacer tous les caches, mais en effet, certaines tables de cache ne sont pas effacées. La commande (simplifiée) suivante tronque tous les caches:

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