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

21

Después de una actualización del módulo, mi sitio ha quedado inutilizable y solo muestra un mensaje de error de php. Intenté eludir el problema 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 todas las [SITE-PREFIX_]cache*tablas?

VOLAR
fuente
¿Podría agregar la consulta que utilizó?
ipwa
En realidad, estaba buscando una consulta para usar con algo como: `VACÍO DONDE ES como el nombre de la tabla 'prefix_chache%', pero al final solo usé phpmyadmin para descartar las tablas porque no pude encontrar esa consulta.
VUELO
Solo como una nota, asegúrese de haber ejecutado las actualizaciones de la base de datos a través drush updbo desde la interfaz de administración, o simplemente yendo /update.phpdespués de una actualización de módulo / núcleo.
Beebee

Respuestas:

6

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.

Letharion
fuente
29

Sí, simplemente puede borrar ( TRUNCATE) todas las cache*tablas.

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-cliy 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 intentar drush cc alldespejar el resto.

Fifi Finance
fuente
1
También es fácil agregar consultas TRUNCATE adicionales para cualquier tabla cache_ adicional que pueda estar presente en su sitio.
millionleaves
11

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 solo comando.

Mohammad AlQanneh
fuente
1
Esto funciona, lo probó y todo es cero.
Marko Blazekovic
1
Esto me ayudó a volver a ejecutar un sitio cuando tenía errores poco claros de "Clase no encontrada".
user18099
1
Gracias Mohammad, me gusta su solución de una línea mejor que la respuesta aceptada, porque es más flexible: el patrón también captura las tablas de caché personalizadas / contrib, no solo las listas codificadas.
Balu Ertl
3

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

DELETE FROM cache;
DELETE FROM cache_block;

y así sucesivamente (consultar 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í, por ejemplo (sintaxis Bash):

echo flush_all > /dev/tcp/127.0.0.1/11211
kenorb
fuente
0

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

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

drush cry / o drush cc allse 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;
Vagelis Prokopiou
fuente