Ich möchte die Aufgabe des Importierens einer entfernten Datenbank mithilfe der WP-CLI automatisieren .
Der aktuelle Prozess besteht darin, ssh
auf den Server zu gehen und eine export
to-Datei mit WP-CLI auszuführen , die Datei über scp
oder in ein lokales Verzeichnis zu kopieren rsync
und dann import
die Datei über die WP-CLI. Ich möchte @alias
hier so viele Schritte wie möglich verwenden und entfernen.
Während ich gerne denken würde, dass so etwas möglich ist:
echo "$(wp @remote db export -)" | wp @local db import -
Bei einer unkomprimierten DB-Größe> 5 GB scheint dies eine praktikablere Option zu sein:
DB_EXPORT=$(echo "$(wp @remote db export -)" | gzip | base64 -w0); echo "$DB_EXPORT" | base64 -d | gunzip | wp @local db import -
Leider stoße ich möglicherweise an die Grenzen des Terminals oder die Struktur dieses Anrufs sollte bereinigt werden, da mein Fenster nur zu hängen scheint.
Gibt es eine andere Lösung, die ich scp
aus diesem Prozess entfernen kann? Gibt es andere Befehle, die ich hier verwenden könnte? Ich habe Multi-Site aus den Beispielen hier entfernt, aber das ist auch etwas zu beachten, das Teil des Alias sein könnte.
Idealerweise würde ich in Zukunft auf so etwas hoffen:
wp @local db import @remote
Aktuelles Beispiel für die Verwendung @alias
mit der Basic Vagrant-Box .
~/.wp-cli/config.yml
@basic:
ssh: basic.dev/var/www/wordpress/
~/.ssh/config
Host basic.dev
HostName basic.dev
User vagrant
IdentityFile ~/sites/basic.dev/.vagrant/machines/default/virtualbox/private_key
Aktualisierung
Basierend auf @davemac sieht es so aus, als könnte dieser Prozess leicht vereinfacht werden
wp db import - <<< $(wp db export -);
Jetzt muss ich nur noch die Tabellen und site_url von MU-Site berücksichtigen
wp @basic db export --tables=$(wp @basic db tables --url=http://basic.dev/site/ --format=csv) - | gzip > basic-dev-site.sql.gz
blog_id=$(wp @basic eval --url=http://basic.dev/site/ 'echo get_current_blog_id();');
prefix=$(wp @basic eval --url=http://basic.dev/site/ 'global $wpdb; echo $wpdb->prefix;')
site_url=$(wp @basic eval "echo site_url();")
Verwenden search-replace
- danke @WestonRuter
sql=$(wp search-replace $(wp eval "echo site_url();" | cut -d ":" -f2) "//new-site.com" --network --skip-columns=guid --export); printf "%s" "$sql"
WP Multisite - Exportieren Sie eine Remote-Site zum lokalen Import ohne Dateien:
wp @remote db export --tables=$remote_tables - | sed "s#$remote_prefix#$local_prefix#g" | sed "s#$remote_site_domain#$local_site_domain#g" | wp @local db import -
Ähnlich
- # 3162 - Unterstützung für die Verwendung des lokalen Dateisystems mit
wp --ssh=<host>
- Sparks - Synchronisierungsdatenbank
- Migrieren einer WordPress-Site mit wp-cli
- Schnelle Migration einer Site mit SSH und WP-CLI
- 10up / MU-Migration Plugin
- Verwendung von WP-CLI in WordPress, nicht in SSH
- Gibt es WP-CLI-Methoden für get_current_blog_id, get_blog_details oder $ wpdb-> prefix?
quelle
Antworten:
Seit WP-CLI 0.24.0 können Sie jetzt Aliase verwenden denen Sie ganz einfach eine entfernte Datenbank importieren können.
Mithilfe von Aliasen können Sie WP-CLI-Befehle für eine andere WP-CLI-Installation ausführen. Diese Installation könnte eine Remote-Maschine sein.
In diesem Sinne habe ich einen Bash-Alias gehackt, der mehrere WP-CLI-Befehle miteinander verbindet, um eine entfernte WP-Datenbank auf eine lokale Site zu ziehen. In diesem Fall habe ich eine lokale Datei wp-cli.yml, in der ich @prod als Alias für meine Produktionssite festgelegt habe (die einen SSH-Alias verwendet).
EIN
pullprod
Befehl auf der aktuellen WP-Site erledigt genau das, was Sie benötigen, und Sie haben den Alias eingerichtet (der auch automatisiert werden kann).Es funktioniert, aber meine nächste Aufgabe besteht darin, zu verbessern, wie ich die Variable $ product_url erhalte, da ich sie derzeit aus einer lokalen Datei ziehe.
quelle
wp @alias db export - > $localfilename.sql
. Es wird ein wenig komplizierter für MU-Sites, aber wenn Sie eine Produkt-URL wollen, versuchen Sieproduction_url=$(wp @prod eval "echo site_url();"); echo "The URL is $production_url";
wp db reset --yes
das? Ah ... löscht alle Tabellen, damit die neuen Dateien eine saubere Datenbank haben. DB Resetwp search-replace
auch ein Argument unterstützt wird,--export
so dass Sie alles auf einmal exportieren und suchen / ersetzen können: wp-cli.org/commands/search-replace