Schnellster Weg (möglichst wenige Schritte) zum lokalen Import einer entfernten database mit WP-CLI

Ich möchte die Aufgabe des Importierens einer entfernten database mithilfe der WP-CLI automatisieren.

Der aktuelle process besteht darin, ssh an den Server zu ssh und einen export in Datei mit WP-CLI auszuführen, die Datei über scp oder rsync in ein lokales Verzeichnis zu kopieren und dann die Datei über die WP-CLI zu import . Ich möchte ein @alias und so viele Schritte wie möglich hier entfernen.

Während ich denken möchte, dass so etwas möglich ist:

 echo "$(wp @remote db export -)" | wp @local db import - 

Mit einer DB-Größe> 5GB unkomprimiert 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 kann ich die Grenzen des Terminals treffen oder die Struktur dieses Anrufs sollte aufgeräumt werden, weil mein Fenster gerade zu hängen scheint.

Gibt es eine andere Lösung, wo ich scp aus diesem process entfernen kann? Gibt es noch andere Befehle, die ich hier benutzen könnte? Ich habe Multi-Site aus den Beispielen hier entfernt, aber das ist auch etwas, das berücksichtigt werden könnte, was Teil des Alias ​​sein könnte.

Im Idealfall würde ich in Zukunft auf so etwas hoffen:

wp @local db import @remote


Aktuelles Beispiel für die Verwendung von @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

Bases auf @davemac sieht so aus, als könnte dieser process leicht vereinfacht werden

 wp db import - <<< $(wp db export -); 

Jetzt muss ich nur noch die Tabellen von MU-Site und site_url 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 von 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 – Exportiert eine entfernte 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=
  • Sparks – Synchronisierungsdatenbank
  • Eine WordPress-Site migrieren Mit wp-cli
  • Eine Site schnell mit SSH und WP-CLI migrieren
  • 10up / MU-Migration Plugin
  • Wie verwende ich WP-CLI aus WordPress, nicht aus SSH?
  • Gibt es WP-CLI-Methoden für get_current_blog_id, get_blog_details oder $ wpdb-> Präfix?

Solutions Collecting From Web of "Schnellster Weg (möglichst wenige Schritte) zum lokalen Import einer entfernten database mit WP-CLI"

Seit WP-CLI 0.24.0 können Sie nun Aliase verwenden, die es Ihnen ermöglichen, eine entfernte database recht einfach zu importieren.

Mithilfe von Aliasnamen können Sie WP-CLI-Befehle für eine andere WP-CLI-Installation ausführen. Diese Installation könnte eine Remote-Maschine sein.

Vor diesem Hintergrund habe ich einen Bash-Alias ​​zusammengehackt, der mehrere WP-CLI-Befehle miteinander verknüpft, um eine Remote-WP-database in eine lokale Site zu ziehen. In diesem Fall habe ich eine lokale wp-cli.yml-Datei, in der ich @prod als Alias ​​für meine Produktionsstätte eingerichtet habe (die einen SSH-Alias ​​verwendet).

 pullprod() { # make a backup of the current local database wp db export _db.sql wp db reset --yes # get current directory name, used for database and URL current=${PWD##*/} # connect to remote site and ssh the remote database down to our local directory wp @prod db export - > $current.sql echo "copying of remote database to $current directory complete." wp db import # database is now imported so we can delete it rm -rf $current.sql # get the remote site URL, remove the http:// for our search replace production_url=$(wp @prod eval '$full_url=get_site_url();$trimmed_url=str_replace("http://", "", $full_url); echo $trimmed_url;') wp search-replace "$production_url" "$current.localhost" echo "All done, enjoy!" } 

Ein pullprod Befehl in der aktuellen WP-Site wird tun, was Sie benötigen, während Sie den Alias ​​eingerichtet haben (der ebenfalls automatisiert werden könnte).

Es funktioniert, aber meine nächste Aufgabe ist es, zu verbessern, wie ich die Variable $ production_url bekomme, wie ich es derzeit aus einer lokalen Datei ziehe.