Wie überspringe ich bestimmte Tabellen mit drush sql-dump?

9

Ich habe eine Drush-Konfigurationsdatei ~ / .drush / drushrc.php:

if (!isset($options['structure-tables']['common'])) {
  $options['structure-tables']['common'] = array(
    'cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog'
  );
}

$options['structure-tables']['common'] = array_merge($options['structure-tables']['common'], 
  array('ctools_css_cache', 'ctools_object_cache', 'logz', 'views_object_cache')
);

Und ich habe eine Bash-Skriptdatei:

/usr/bin/drush sql-dump --root="/home/username/domains/sitename/www" --skip-tables-key="common" --gzip --result-file=/home/username/backup/$year/$month/dbname_$date_now_time.sql

Aber wenn ich es ausführe, hat die Sicherungsdatei immer noch Daten in Cache-Tabellen. Was mache ich falsch?

Und die zweite Frage ist: Wenn ich dies in crontab ablege, muss ich die Konfigurationsdatei woanders ablegen?

Ich benutze Drush Version 8.

dark_kz
quelle
1
Ich frage mich, ob das drushrc.phpnicht läuft. Versuchen Sie einen var_dump von $options['structure-tables']in the drushrc.phpjust, um zu bestätigen, dass es ausgeführt wird.
Hackmesser

Antworten:

0

Entschuldigung, ich kann Ihnen bei Ihrer ersten Frage nicht viel helfen ...

Ihre 2. Frage gestellt:

Und die zweite Frage ist: Wenn ich dies in crontab ablege, muss ich die Konfigurationsdatei woanders ablegen?

Die Drush-Dokumentationssite enthält Links zur Beispieldatei drushrc.php , in der angegeben ist, wo Sie die RC-Datei ablegen können:

https://raw.githubusercontent.com/drush-ops/drush/master/examples/example.drushrc.php

Benennen Sie diese Datei in drushrc.php um und kopieren Sie sie optional in der Reihenfolge ihrer Priorität an eine der unten aufgeführten Stellen:

  1. Drupal-Site-Ordner (z. B. sites / {default | example.com} /drushrc.php).
  2. Die Ordner Drupal / drush und sites / all / drush oder der Ordner / drush im Verzeichnis über dem Drupal-Stammverzeichnis.
  3. An jedem Ort, wie durch die Option --config (-c) angegeben.
  4. Der .drush-Ordner des Benutzers (dh ~ / .drush / drushrc.php).
  5. Systemweiter Konfigurationsordner (z. B. /etc/drush/drushrc.php).
  6. Drush-Installationsordner.

Für Cron wird in der Dokumentation empfohlen , Drush so zu konfigurieren, dass es als derselbe Benutzer ausgeführt wird, der Ihren Webserver ausführt. Davon abgesehen empfehle ich Ihnen, Ihre RC-Datei an Speicherort (5), einem systemweiten Konfigurationsordner, abzulegen. Ja, lokalisierte Drush-RC-Dateien müssen dann Ihre systemweite Konfigurationsdatei nach Bedarf überschreiben (na ja).

Tenken
quelle
Alle diese Links sind jetzt 404. :(
Dale Anderson
@ DaleAnderson ... das ist das Internet und nichts ist dauerhaft. Hier ist ein praktischer Service für Sie. Ich empfehle Ihnen, die Verwendung zu erlernen. Bitte beachten Sie, dass ich gerade einen Schnappschuss vom September 2015 von der drush.org-Website web.archive.org/web/20150905130324/http://www.drush.org ausgewählt habe: 80 / de /… Zu diesem Zeitpunkt sollten Sie auch neuere Tools wie Drupal Console oder die Drush 9-Dokumente in Betracht ziehen.
Tenken
24

Speichern Sie alle Tabellen mit Ausnahme der cacheTabelle und der Tabellen, die mit beginnen cache_.

drush sql-dump --skip-tables-list=cache,cache_* > dumpfile.sql

Nur Datenbankstruktur. Überhaupt keine Daten.

drush sql-dump --extra=--no-data > dumpfile.sql

Nur Daten. Keine Cache-Daten und keine Cache-Struktur.

drush sql-dump --skip-tables-list=cache,cache_* --data-only > dumpfile.sql

Keine Cache-Daten, sondern Speicherauszug in ihren Strukturen.

drush sql-dump --structure-tables-list=cache,cache_* > dumpfile.sql

SQL-Dump-Dokumentation

Francisco Luz
quelle
Das hat --extra=--no-databei mir nicht funktioniert, aber ich konnte es --skip-tables-list="*"und das hat funktioniert.
greggles
Möglicherweise möchten Sie Anführungszeichen verwenden, um "cache,cache_*"zu verhindern, dass Ihre Shell mit Dateien übereinstimmt, die cache_*in Ihrem Arbeitsverzeichnis aufgerufen wurden .
Rudolfbyker
0

Aus irgendeinem Grund funktionierte cache_ * mit drush 9+ nicht für mich, bis ich den Unterstrich wegließ. Dies kann jedoch spezifisch für meine (Server-) Bash / Terminal sein. Was hat bei mir funktioniert:

drush sql-dump --skip-tables-list=cache*

und Sie können jederzeit den hinzufügen --verbose, um den tatsächlichen MySQL-Speicherauszug und dessen Parameter --ignore anzuzeigen.

awm
quelle
Wenn mit bash cache_*Dateien in Ihrem aktuellen Verzeichnis übereinstimmen, werden diese Dateinamen von bash globalisiert und als Argument verwendet. Sie können doppelte Anführungszeichen setzen, um sicherzustellen, dass der Literalwert an den Befehl übergeben wird, anstatt an alle Dateien, die er globalisiert.
greggles