it-swarm-es.com

¿Cómo borro el caché usando una consulta SQL?

Después de una actualización del módulo, mi sitio ha quedado inutilizable y solo muestra un mensaje de error de php. Traté de eludir el problema con drush cc, pero eso no ayudó.

También probé con un script php personalizado, pero eso tiene problemas para encontrar mi DRUPAL_ROOT

Solo quiero borrar las tablas de caché de Drupal 7 directamente en el servidor mysql, pero no estoy seguro de qué tablas deberían borrarse para eso y especialmente cuáles no debería borrar.

¿Solo necesito borrar todo el [SITE-PREFIX_]cache* ¿mesas?

23
FLY

Cualquier módulo bien escrito que tenga un caché, debe anteponerlo con caché, lo que significa que la respuesta a su pregunta es "Sí".

En el extraño caso de que un módulo almacene datos en caché en otro lugar, puede verificar si sus módulos tienen implementaciones de hook_flush_caches , y ver qué eliminan.

6
Letharion

Sí, simplemente puede borrar (TRUNCATE) todos cache* mesas.

Esto funcionó bien para mí:

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 usa drush, ejecute drush sql-cli y pegue lo anterior allí.

Es posible que estos comandos no borren todas las tablas de caché de su sitio específico, pero pueden ayudar a corregir algunos errores. Luego puedes probar drush cc all para limpiar el resto.

32
kqw

Para borrar todas las tablas de caché, ejecute este comando en la terminal del servidor.

# 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

esto recorrerá todas las tablas de caché y las truncará en un comando.

11
Mohammad AlQanneh

Puede TRUNCATE/DELETE cada tabla por separado, que comienza desde cache_ me gusta:

DELETE FROM cache;
DELETE FROM cache_block;

y así sucesivamente (verifique a través de drush sqlq "SHOW TABLES LIKE 'cache_%'").

O genere una consulta con la lista de tablas y páselo a drush para truncarlas, por ejemplo:

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

Si está usando memcached, también necesita vaciar las cachés allí, p. (Sintaxis Bash):

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

O bien, puede importar su volcado de mysql con tablas ya truncadas cache*:

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

JFR en este artículo ofrece otra solución flexible basada en patrones en forma de consulta SQL sin formato, pero no me funcionó tan bien como la de Mohammad: https://thebarton.org/clear-drupal-cache -sql-query /

0
Balu Ertl

drush cr y/o drush cc all se supone que borra todas las cachés, pero de hecho algunas tablas de caché no se borran. El siguiente comando (simplificado) trunca todas las memorias caché:

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