Wie wähle ich aus, welche Tabellen für drush sql-sync @dev @staging übersprungen werden sollen?

7

Nach meiner vorherigen Frage Wie stelle ich Drush SQL-Sync so ein, dass Benutzer nicht zwischen @dev und @staging geklont werden? Ich habe manuell über 80 Tabellen vorausgewählt, die nicht automatisch synchronisiert werden sollen (Inhalt, Rollen und Berechtigungen, Benutzer, temporär, Cache). Ich bin mit dieser Lösung nicht ganz zufrieden. Warum? Weil meine Filterentscheidungen auf Erfahrung, Intuition und Vermutung basieren, wann ich die Best-Practice-Methode anwenden möchte.

Wie wähle ich richtig aus, für welche Tabellen übersprungen werden soll drush sql-sync @dev @tstund drush sql-sync @production @staging?

Mein Setup:

git.drupal.org ==> lokales Drupal-Git-Repository ==> @dev -> @tst -> @staging -> @production (Konfiguration, statischer Inhalt, Rollen und Berechtigungen)

@staging <- @production (Inhalt, zu testende Produktionsszenarien)

Der endgültige Leitfaden zu Drupal 7 von Benjamin Melançon und anderen sagt:

Hier ist die Liste der Tabellen, die in angezeigt wird example.drushrc.php:

$options['structure-tables'] = array(  'common' => array('cache',
  'cache_filter', 'cache_menu', 'cache_page', 'history', 'sessions',
  'watchdog'),
);

Möglicherweise müssen Sie dieser Liste weitere Tabellen hinzufügen. Ein guter Anfang wäre, die Liste der Tabellen zu betrachten, die cachein ihrem Namen über enthaltendrush sql-query 'show tables;' | grep cache

Entfernen Sie aus dieser Liste Tabellen wie imagecache_actionusw. und fügen Sie den Rest Ihrer Strukturtabellenliste hinzu.

Nachdem Sie eine sql-syncTabelle mit übersprungenen Tabellen erstellt haben, müssen Sie den Cache auf der Zielwebsite leeren, um sicherzustellen, dass die Dinge richtig funktionieren.

Was sind die anderen zu berücksichtigenden Tabellen? Warum?

Refineo
quelle
Es gibt einen Patch (in Arbeit) mit dem Namen "Bessere Handhabung von Strukturtabellen und Optionen zum Überspringen von Tabellen (einschließlich Unterstützung für Cache_ *!)". Drupal.org/node/698264 würde besonders bei Cache_ * - und Feld_ * -Tabellen sehr hilfreich sein Begrenzen Sie Änderungen in Drush-Datenverteilungsfiltern.
Refineo

Antworten:

6

Drush SQL-Sync unterstützt keine freigegebenen Datenbanken, die Präfixe verwenden. Sie könnten etwas Glück haben, wenn Sie ein Wrapper-Skript geschrieben haben, mit drush sqlq 'show tables;'dem eine Liste der verfügbaren Tabellen abgerufen, manuell nach Präfix gefiltert und dann über die Option --tables-list an sql-sync zurückgegeben wird.

greg_1_anderson
quelle
5

In Drupal 7 sollten Sie folgende Tabellen berücksichtigen:

'cache', 'cache_field', 'cache_form', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'sessions', 'watchdog'

In Drupal 8 sind dies:

'cache', 'cache_bootstrap', 'cache_config', 'cache_container', 'cache_data', 'cache_default', 'cache_discovery', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog'

Dies schließt keine spezifischen Tabellen ein, die sich auf das Migrationsmodul beziehen, oder andere benutzerdefinierte Tabellen, in denen möglicherweise temporäre Daten gespeichert sind.

Beispiel für einen Drush-Befehl zum Speichern und Überspringen dieser Tabellen (erstellen Sie nur eine Struktur ohne Daten):

drush sql-dump --structure-tables-list=cache,cache_filter,cache_menu,cache_page,history,sessions,watchdog --result-file=dump.sql

Tipp: --ordered-dumpFür eine bessere menschliche Ausgabe hinzufügen, beim Import jedoch etwas langsamer.

Normalerweise structure-tablesollte das Hinzufügen einer Option für lokale Operationen ausreichen ( $options['structure-tables']), aber sql-syncich denke, dies sollte für einen bestimmten Alias ​​im befehlsspezifischen Abschnitt hinzugefügt werden, z

$aliases['foo'] = array(
  // These options will only be set if the alias is used with the specified command.
  'command-specific' => array(
    'sql-sync' => array(
      'structure-tables-key' => 'common',
      'skip-tables-key' => 'common',
      'structure-tables' => array(
        // You can add more tables which contain data to be ignored by the database dump
        'common' => array('cache', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'search_index', 'sessions', 'watchdog'),
      ),
      'skip-tables' => array(
        'common' => array('field_deleted_revision_63'),
      ),
    ),
    'sql-dump' => array(
      'ordered-dump' => TRUE,
      'structure-tables-key' => 'common',
      'skip-tables-key' => 'common',
    ),
  ), // end: command-specific
  // Applied only if the alias is used as the source.
  'source-command-specific' => array(
  ),
  // Applied only if the alias is used as the target.
  'target-command-specific' => array(
  ),
);
Kenorb
quelle