it-swarm.com.de

Wie lösche ich den Cache mithilfe einer SQL-Abfrage?

Nach einem Modul-Update ist meine Site unbrauchbar geworden und zeigt nur eine PHP-Fehlermeldung an. Ich habe versucht, das Problem mit drush cc Zu umgehen, aber das hat nicht geholfen.

Auch mit einem benutzerdefinierten PHP-Skript versucht, aber das hat Probleme beim Finden meines DRUPAL_ROOT

Ich möchte nur die Cache-Tabellen von Drupal 7 direkt auf dem MySQL-Server löschen, aber ich bin mir nicht sicher, welche Tabellen dafür gelöscht werden sollen und insbesondere welche nicht.

Muss ich nur alle [SITE-PREFIX_]cache* - Tabellen löschen?

23
FLY

Jedes gut geschriebene Modul, das einen Cache hat, sollte ihm einen Cache voranstellen, was bedeutet, dass die Antwort auf Ihre Frage "Ja" lautet.

In dem seltsamen Fall, dass ein Modul Daten an einer anderen Stelle zwischenspeichert, können Sie Ihre Module auf Implementierungen von hook_flush_caches überprüfen und sehen, was sie entfernen.

6
Letharion

Ja, Sie können einfach alle cache* - Tabellen löschen (TRUNCATE).

Das hat bei mir gut funktioniert:

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;

Wenn Sie drush verwenden, führen Sie drush sql-cli Aus und fügen Sie das oben genannte ein.

Diese Befehle löschen möglicherweise nicht alle Cache-Tabellen Ihrer spezifischen Site, können jedoch zur Behebung einiger Fehler beitragen. Anschließend können Sie versuchen, den Rest mit drush cc all Zu löschen.

32
kqw

Führen Sie diesen Befehl in Ihrem Serverterminal aus, um alle Cache-Tabellen zu löschen.

# 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

dadurch werden alle Cache-Tabellen durchlaufen und in einem Befehl abgeschnitten.

11

Sie können entweder jede Tabelle einzeln TRUNCATE/DELETE, beginnend mit cache_ mögen:

DELETE FROM cache;
DELETE FROM cache_block;

und so weiter (überprüfen Sie über drush sqlq "SHOW TABLES LIKE 'cache_%'").

Oder generieren Sie eine Abfrage mit einer Liste von Tabellen und übergeben Sie diese an drush, um sie abzuschneiden, z.

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

oder:

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

Wenn Sie memcached verwenden, müssen Sie auch die Caches dort leeren, z. (Bash-Syntax):

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

Oder Sie können Ihren MySQL-Dump mit bereits abgeschnittenen cache* - Tabellen importieren:

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

JFR in diesem Artikel wird eine andere flexible musterbasierte Lösung in Form einer SQL-Rohabfrage angeboten, die für mich jedoch nicht so gut funktionierte wie die von Mohammad: https://thebarton.org/clear-drupal-cache -sql-query /

0
Balu Ertl

drush cr und/oder drush cc all soll alle Caches löschen, aber tatsächlich werden einige Cache-Tabellen nicht gelöscht. Der folgende (vereinfachte) Befehl schneidet alle Caches ab:

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