Welche Tische sind sicher abzuräumen?

40

Ich habe eine Client-Site geerbt, die ohne Grund über eine extrem große Datenbank verfügt. Es gibt eine moderate Menge an Inhalten und nur sehr wenige aktivierte Module. Die Datenbank ist jedoch zu groß, um problemlos verschoben werden zu können, und ich möchte sie bereinigen.

Ich habe die Standard-Cache-Tabellen, Syslog und Accesslog gelöscht.

Gibt es andere Tabellen, die ich auf einer Standard-Drupal-Site sicher abschneiden kann?

Nigel Waters
quelle
1
Sie können die Tabellen nach ihrer Größe in phpmyadmin sortieren. Probieren Sie das aus und schauen Sie, welche Tabellen die größten sind und berichten Sie das hier. Ich habe zum Beispiel riesige Sitzungstabellen gesehen, die aus irgendeinem Grund nicht aufgeräumt wurden. Das ist etwas, das Sie klären können, wenn Sie mit Benutzern leben, die sich erneut anmelden müssen (und möglicherweise eingegebene Formulardaten verlieren, wenn sie sich auf der Site befinden, sodass Sie dies möglicherweise mit den Benutzern
abstimmen
Nur eine Randbemerkung, dass alle Antworten, die unter "Abschneiden" {cache_form}stehen, nicht richtig sind. Dies ist keine echte Cache-Tabelle. Es enthält laufende Formulare. Wenn Sie alle Daten in dieser Tabelle löschen, Ihre Benutzer können Daten verloren gehen. Mit dieser Tabelle können Sie am besten Einträge verfallen lassen.
mpdonadio

Antworten:

21

Verwenden Sie das Backup & Migrate-Modul . Es wird mit guten Standardeinstellungen für das Überspringen nicht erforderlicher Daten geliefert . Standardmäßig wird eine DB-Sicherung ohne Cache, Watchdog und einige andere Tabellen erstellt.

Wenn dies nicht hilft, schauen Sie in phpMyAdmin nach und teilen Sie uns mit, welche Tabellen viele Einträge enthalten.

BetaRide
quelle
1
Dies ist der erste Ort, an den ich gegangen bin. Die Datenbank ist jedoch überlastet und wird mit dieser Methode nicht gesichert. Meine Absicht ist es, die Datenbank zu löschen, damit ich die Sicherung verwenden und regelmäßig migrieren kann. Im Wesentlichen frage ich mich, ob es weitere Tabellen gibt, die ich löschen kann (die von der BAM nicht standardmäßig übersprungen werden).
Nigel Waters
Wenn Sie über Befehlszeilenzugriff verfügen, können Sie mit drush die Sicherung und Migration starten. Oder greifen Sie über die Befehlszeile auf mysql zu (Beispiel: mysqldump --host = your.host.com --user = db_user --compress --password your_pw> dump.sql). Auf diese Weise treten keine Zeitüberschreitungen auf. Im Allgemeinen ist das Löschen ohne Backup nicht sehr sicher. Es kann leicht vorkommen, dass eine Seite kaputt ist und Sie nicht mehr zurückkehren können.
BetaRide
Das Problem liegt nicht bei den Timeouts. Ich weiß, dass ich Backups einfach über ssh / drush ausführen kann. Ich würde gerne die Datenbank aufräumen, da sie in den letzten Jahren ein bis viele Male aufgeräumt wurde und eine Menge unnötiger Daten enthalten ist. Ich muss nur wissen, welche Tabellen ich sicher löschen kann (ich weiß nicht, wie ich meine Site sichern oder verschieben soll).
Nigel Waters
@BetaRide ist korrekt. Die von der BAM ausgeschlossenen Standardeinstellungen sind die sicheren. Die anderen können tatsächliche Daten haben oder nicht.
mpdonadio
22

Drupal 7-Tabellen, die ausgeschlossen werden können

Hier ist eine Liste von Tabellen in Drupal 7, die Sie entweder löschen (um die Datenbankgröße zu verringern) oder sicher ausschließen können, um eine Migration durchzuführen (wie bei der Frage: Wie kann ich die lokal exportierte Datenbankgröße verringern, um mein Serverimportlimit zu umgehen? ):

  • accesslog
  • Stapel
  • alle Cache-bezogenen Tabellen wie:
    • Cache *
    • cache_block
    • cache_content
    • cache_filter *
    • cache_form
    • cache_calendar_ical
    • cache_menu *
    • cache_page *
    • cache_views
    • * _cache, z. B. features_cache oder views_data_object_export_cache
  • ctools_views_cache
  • ctools_object_cache
  • devel_queries
  • devel_times
  • Flut
  • Geschichte
  • Warteschlange
  • verschiedene search_ * -Tabellen, wie:
    • search_dataset
    • search_index
    • search_keywords_log
    • search_total
  • Semaphor
  • Sitzungen
  • Wachhund
  • webform_submitted_data

In der Regel belegen Tabellen wie search_indexund watchdogviel Datenbankspeicher, sodass bereits das Eliminieren dieser beiden Tabellen einen großen Unterschied bewirken kann.

Andere Tabellen, die möglicherweise ausgeschlossen werden

Überprüfen Sie die Größe Ihrer verbleibenden Tabellen und ermitteln Sie, welche davon die größte Größe haben.

In der Regel finden Sie Sitzungstabellen, für die keine Bereinigungsprozedur vorhanden ist. Solche Tabellen können Sie wahrscheinlich auch ausschließen.

Modul sichern und migrieren

Um die Herausforderung zu reduzieren , wie detailliert in „ Wie wird die lokal ausgeführten Datenbankgröße verringern meinen Server Importlimit zu umgehen? “, Blick auf die Sicherung und Migrate Modul auch. Hier ist ein Zitat von seiner Projektseite (Fettdruck hier hinzugefügt):

Sichern Sie Ihre Drupal MySQL-Datenbank, Ihren Code und Ihre Dateien und stellen Sie sie wieder her, oder migrieren Sie eine Site zwischen Umgebungen. Backup and Migrate unterstützt die Komprimierung von gzip, bzip und zip sowie automatische geplante Backups.

Mit Backup and Migrate können Sie einige oder alle Ihrer Datenbanktabellen zum Herunterladen von Dateien oder zum Speichern in einer Datei auf dem Server oder außerhalb des Standorts sowie zum Wiederherstellen von einem hochgeladenen oder zuvor gespeicherten Datenbank-Dump sichern. Sie können auswählen, welche Tabellen und welche Daten standardmäßig gesichert und zwischengespeichert werden sollen .

Und es gibt noch mehr: Wenn sich Ihre lokale Umgebung (z. B. Win oder Mac) von dem Betriebssystem unterscheidet, auf dem der Server Ihrer gehosteten Website ausgeführt wird (z. B. Linux), sind diese Unterschiede zwischen den Betriebssystemen mit potenziellen zusätzlichen Herausforderungen verbunden. Ich habe gute Erfahrungen mit dem Backup- und Migrate-Modul zwischen verschiedenen Betriebssystemen gemacht, die keine Probleme verursachten (einwandfrei funktionierten), wenn der typische MySql-Export / Import zuvor fehlgeschlagen war.

Pierre.Vriens
quelle
Gut zu erwähnen, dass Tabellen mit cache_vorangestelltem oder _cacheangefügtem Code auch sicher abgeschnitten werden können, z. B. features_cacheoder views_data_object_export_cacheusw.
Beebee,
1
Die Suchtabellendaten können zwar ausgeschlossen werden, es kann jedoch sehr, sehr lange dauern, bis die Indizes auf großen Websites wiederhergestellt sind. Beurteilen Sie dies von Fall zu Fall.
mpdonadio
2
Auch der B & M-Auszug über zwischengespeicherte Daten ist etwas falsch. Bei Aktivierung auf einer Site werden Cachetabellen ausgeschlossen. Wenn Sie jedoch ein Modul hinzufügen, nachdem B & M eingerichtet wurde, werden Cache-Tabellen möglicherweise nicht zur Ausschlussdatenliste hinzugefügt. Ich habe dies oft gesehen, normalerweise, wenn ich die Einstellungen im Standardprofil überschreibe.
mpdonadio
@MPD: Danke für dieses interessante Feedback (wusste noch nichts davon!). Über Suchtabelle: gültiger Punkt. Aber ich persönlich würde mich immer für den Neuaufbau-Ansatz entscheiden: Er hilft, die Einschränkung zu umgehen, und stellt sicher, dass der Index mit dem tatsächlichen Inhalt im Ziel übereinstimmt. Zu Ihrem zweiten Kommentar: Der Auszug ist ein Ausschnitt aus der Projektseite, daher möchten Sie möglicherweise ein Problem in der Problemwarteschlange ablegen. .
Pierre.Vriens
@ Pierre.Vriens Der Abgleich des Inhalts sollte keine Rolle spielen, vorausgesetzt, Sie haben Cron ausgeführt und stellen sicher, dass die Indizierung erfolgt. B & M, ziemlich sicher, dass dies ein bekanntes Problem ist. Außerdem ist der Abschnitt über Sitzungsdaten nicht 100% korrekt. Diese Tabelle wird groß, da die Standard-Sitzungszeit ungefähr drei Wochen beträgt. _drupal_session_garbage_collectionwird diese Tabelle aufgeräumt halten, basierend auf den Systemeinstellungen.
mpdonadio
19

Meiner Erfahrung nach lösche ich alle "cache_ *" - Tabellen.

  • plus "watchdog", wenn ich mich nicht um vergangene Drupal-Logs kümmere
  • plus "accesslog", wenn mir angemeldete Benutzer egal sind
  • plus "Suche", wenn mir der Inhalt indizierter Knoten egal ist
thePanz
quelle
1
Gleiche hier, ich würde auch Sitzungen.
Alex Weber
2
Ein Hinweis für alle, die dies versuchen: Erstellen Sie zuerst ein Backup. Und lassen Sie die Tabellen nicht fallen, sondern leeren Sie sie oder kürzen Sie sie.
timofey.com
9

Ich führe manchmal diese SQL aus, um das Wachstum der oberen Tabellen im Auge zu behalten:

SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =  'yourdbnamehere'
ORDER BY table_rows DESC 
uwe
quelle
Welche Spalte sollte ich auf Wachstum prüfen ?, Du meinst TABLE_ROWS
Bala
8

Watchdog und Sessions können ebenfalls gelöscht werden. Beachten Sie, dass alle Benutzer abgemeldet werden.

Attiks
quelle
6

Mit mySQL können Sie unterhaltsame Dinge mit dem Programm mysqldump tun, um die Datenbank vollständig oder in Teilen zu exportieren. Zum Beispiel exportiert dies nur die Struktur:

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --no-data dbname > ~/dbname.sql

Sie können dann die Option "Tabelle ignorieren" verwenden, um weitere Daten zu exportieren, z

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --ignore-table=dbname.huge_table --ignore-table=dbname.massive_table --ignore-table=dbname.useless_table some_host >> ~/dbname.sql

Dadurch werden die Daten am Ende der früheren Datei platziert, wobei einige massive Tabellen ignoriert werden.

Wenn Sie dann die massiven Tabellen benötigen, können Sie sie mithilfe des oben beschriebenen Ansatzes in eine andere Datei exportieren. Anschließend können Sie sie in Chunks importieren (obwohl möglicherweise ein fk-Häkchen erforderlich ist).

Sie haben Ihre Datei vor dem Hochladen gzipen lassen, oder ist das eine dumme Frage?

Henrys Katze
quelle
5

Verwenden Sie das OptimizeDB- Modul, um die Cache-Tabellen zu bereinigen. Hilfreich ist auch die Datenbankverwaltung .

Vergessen Sie nicht, ein Backup der Datenbanken zu erstellen.

M ama D
quelle
Datenbank ist jetzt 14Mo, ich habe OptimizeDB verwendet, Thak you again
Mitch
@Mitch you welcome
M ama D
2

nicht der Super - Experte auf diesem , aber meine Erfahrung teilen ... wenn Sie die Sicherung und Migrate - Modul nicht verwenden und sie manuell könnten Sie truncate wären leer / einige der Tabellen exportieren watchdog, cache, cache_menu, cache_block, cache_content, cache_formda sie einen großen enthalten könnten Menge an zwischengespeicherten Daten, die wahrscheinlich nicht schaden würden ... Aber auch dies ist meine Erfahrung und ich habe keine Probleme oder Datenverluste aufgrund dessen festgestellt.

optimusprime619
quelle
2

Einige Ideen:

  • Ein völlig anderer Ansatz wäre, RSS-Feeds mit Ansichten der Daten zu erstellen, die Sie behalten möchten. Erstellen Sie dann eine neue Drupal-Installation und importieren Sie diese Daten mit der Feed-API .
  • Und noch ein anderer Ansatz: Stellen Sie einen Studenten ein und lassen Sie ihn die Daten manuell in Ihre neue Installation übertragen.
  • Oder diese: Erzählen Sie uns mehr darüber, welche Tische sehr groß sind und was der Grund dafür ist (wenn Sie es wissen).
BetaRide
quelle
2

Überprüfen Sie example.drushrc.phpdie folgende Liste:

$options['structure-tables']['common'] = array('cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog');
$options['skip-tables']['common'] = array('migration_*');

Sie können sicher gelöscht werden, wenn Sie die Datenbank zwischen verschiedenen Umgebungen verschieben (insbesondere, wenn Sie mit großen Datenbanken arbeiten ). Sie müssen jedoch noch verstehen, was Sie löschen.

Kenorb
quelle
1

Zusätzliche Tabellen, die gelöscht werden können:

  • Stapel
  • webform_submitted_data

Andere Dinge, die viel Platz in Anspruch nehmen könnten: - Ältere Versionen Ihres Inhalts (nicht mit einem einfachen Kürzel zu bereinigen). - locales_source und locales_target. Wenn Sie Sprachen haben, die nicht mehr verwendet werden, oder Zeichenkettenübersetzungen für Module, die Sie nicht mehr verwenden. Diese Tische scheinen nie gereinigt zu werden.

fietserwin
quelle