¿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?


¿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.


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.


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.


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

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

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;

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.