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 @tst
und 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
cache
in ihrem Namen über enthaltendrush sql-query 'show tables;' | grep cache
Entfernen Sie aus dieser Liste Tabellen wie
imagecache_action
usw. und fügen Sie den Rest Ihrer Strukturtabellenliste hinzu.Nachdem Sie eine
sql-sync
Tabelle 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?
Antworten:
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.quelle
In Drupal 7 sollten Sie folgende Tabellen berücksichtigen:
In Drupal 8 sind dies:
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):
Tipp:
--ordered-dump
Für eine bessere menschliche Ausgabe hinzufügen, beim Import jedoch etwas langsamer.Normalerweise
structure-table
sollte das Hinzufügen einer Option für lokale Operationen ausreichen ($options['structure-tables']
), abersql-sync
ich denke, dies sollte für einen bestimmten Alias im befehlsspezifischen Abschnitt hinzugefügt werden, zquelle