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?
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.
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.
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.
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
Si vous utilisez memcached, vous devez également vider les caches, par exemple (Syntaxe Bash):
echo flush_all > /dev/tcp/127.0.0.1/11211
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
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 /
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;