Welche Tabellen sollten geleert werden, wenn der in der Datenbank gespeicherte Cache manuell gelöscht wird?

13

Bevor D8 den Cache manuell löscht, kann man alle Tabellen abschneiden, die mit beginnen cache_.

In Drupal 8 gibt es noch Tabellen, die mit beginnen cache_, aber es gibt auch eine cachetagsTabelle.

Ist der Hinweis in D8 noch zu kürzen, cache_*wenn Sie den Cache manuell löschen müssen? Ist es sicher / erforderlich / empfohlen, die cachetagsTabelle zusammen mit den cache_*Tabellen abzuschneiden?

Ich bin mir bewusst, dass es Contrib-Module geben kann, die die Dinge anders machen. Ich bin hauptsächlich daran interessiert, was der Kern macht und was als "Best Practice" für Drupal 8 im Allgemeinen gilt.

Clive
quelle
Sie können sich nur ansehen, was das Löschen aller Cacheschaltflächen bewirkt.
Eyal
Alle Cache-Tabellen können sicher abgeschnitten werden, sie wurden jedoch nicht vollständig entfernt.
hamza.gt

Antworten:

6

Wenn Sie in Drupal 8 nach den sicheren Tabellen suchen, die manuell gelöscht werden müssen, löschen Sie die Tabellen, die mit cache_ beginnen, und kürzen Sie auch die Cachetags-Tabelle.

Wenn Sie drush verwenden, verwenden Sie diesen Befehl, um den Cache zu löschen.

Cache wiederherstellen

Rahul Mishra
quelle
3

Nach diesem Artikel cachetags werden beim Speichern Cache-Objekte gesetzt, daher sollte es sicher sein, diese Tabelle auch abzuschneiden. Cachetags identifizieren Cache-Objekte und Sie können alle zugehörigen Objekte gleichzeitig abrufen.

Paul Bönisch
quelle
Ich habe getestet und die Tabelle kann ohne Probleme (oder nur mit dem potenziellen Leistungsproblem) abgeschnitten werden. Es wird neu erstellt, wenn die Entität geladen wird, aber ... Ich weiß nicht, warum die in Cachetags gespeicherten Tags bereits in der Tabelle enthalten sind, wenn Sie eine Entitätsinstanz löschen. Ich denke, dass es entfernt werden muss.
estoyausente
Ich gehe davon aus, dass Daten aus der Cachetags-Tabelle beim Cron-Run entfernt wurden und dass die nach dem Entfernen der Entitäten angezeigten Daten nur Reste sind
Paul Bönisch
0

Das ist sehr praktisch. Ersetzen Sie den Datenbanknamen nach Bedarf:

DB_NAME="dbname"

mysql -uroot -proot --execute="SELECT concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '${DB_NAME}' AND TABLE_NAME LIKE '%cache%'" | sed 1d | mysql -uroot -proot ${DB_NAME};
André
quelle
0

Sie könnten dies für einen Einzeiler tun:

drush sqlq "TRUNCATE cache_default;TRUNCATE cache_bootstrap;TRUNCATE cache_container;TRUNCATE cache_discovery;TRUNCATE cache_data;" -l <uri> --no-interaction

Fügen Sie so viele mit dem Präfix cache_ hinzu, wie Sie möchten.

Dan
quelle