Il modo più veloce (numero minimo di passaggi) per importare localmente un database remoto utilizzando WP-CLI


13

Vorrei automatizzare l'attività di importazione di un database remoto utilizzando WP-CLI .

Il processo corrente è sshsul server ed esegui un exportfile su utilizzando WP-CLI , copia il file in una directory locale tramite scpo rsync, quindi importil file tramite WP-CLI. Vorrei utilizzare @aliase rimuovere il maggior numero di passaggi possibile qui.

Mi piacerebbe pensare che qualcosa del genere sia possibile:

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

Con una dimensione DB> 5 GB non compressa, questa sembra un'opzione più praticabile:

DB_EXPORT=$(echo "$(wp @remote db export -)" | gzip | base64 -w0); echo "$DB_EXPORT" | base64 -d | gunzip | wp @local db import -

Sfortunatamente potrei colpire i limiti del terminale o la struttura di questa chiamata dovrebbe essere ripulita perché la mia finestra sembra bloccarsi.

C'è un'altra soluzione in cui posso rimuovere scpda questo processo? Ci sono altri comandi che potrei utilizzare qui? Ho rimosso più siti dagli esempi qui, ma è anche qualcosa da considerare che potrebbe far parte dell'alias.

Idealmente, spererei in qualcosa del genere in futuro:

wp @local db import @remote


Esempio di configurazione attuale dell'uso @aliascon la scatola Basic Vagrant .

~/.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

aggiornamenti

Basandosi su @davemac sembra che questo processo possa essere facilmente semplificato

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

Ora ho solo bisogno di prendere in considerazione le tabelle di MU-Site e site_url

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();")

Utilizzo search-replace- grazie @WestonRuter

sql=$(wp search-replace $(wp eval "echo site_url();" | cut -d ":" -f2) "//new-site.com" --network --skip-columns=guid --export); printf "%s" "$sql"

Multisito WP: esporta un sito remoto per l'importazione locale senza file:

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 -


Immagine simile


È possibile scrivere uno script bash chiamato tramite cron job nel file scp / rsync sul server remoto. Quindi sul server remoto potresti avere un altro script bash che viene eseguito tramite cron job che controlla la cartella per il file di backup e una volta che il file è lì, lo importerà nel DB remoto. Questo è simile a come mantengo sincronizzato un server "hot standby".
ottone,

Personalmente, non vorrei farlo in un lavoro cron perché aggiunge un'altra dipendenza al mix ed è più solo per cercare di sincronizzare il locale con il telecomando quando ci sto lavorando. "Remote" è uno dei tanti alias - lo stesso con locale. Un altro motivo per ridurre le chiamate alle funzioni è perché tendo ad apprezzare una riga / copia / incolla / vai! righe di codice;)
jgraup

Hai provato a scrivere il dump in un file temporaneo anziché in una variabile?
David,

Ecco come è necessario farlo ora che richiede funzioni al di fuori di WP-CLI per gestire il trasferimento dei file --- e più autenticazione per posizione.
jgraup,

@jgraup Questa domanda è stata risolta?
Ethan Jinks O'Sullivan,

Risposte:


6

Da WP-CLI 0.24.0 è ora possibile utilizzare gli alias che consentono di importare un database remoto abbastanza facilmente.

Utilizzando gli alias, è possibile eseguire i comandi WP-CLI su un'altra installazione di WP-CLI. Quell'installazione potrebbe essere una macchina remota.

Con questo in mente ho hackerato insieme un alias bash che mette insieme diversi comandi WP-CLI per estrarre un database WP remoto in un sito locale. In questo caso, ho un file wp-cli.yml locale in cui ho impostato @prod come alias per il mio sito di produzione (che utilizza un alias SSH).

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!"
}

Un pullprodcomando nell'attuale sito WP farà ciò di cui hai bisogno, così come hai impostato l'alias (che potrebbe anche essere automatizzato).

Funziona, ma il mio prossimo compito è migliorare il modo in cui ottengo la variabile $ production_url, poiché attualmente la sto estraendo da un file locale.


Questo è fantastico Onestamente stavo davvero cercando il wp @alias db export - > $localfilename.sql. Diventa un po 'più complicato per i siti MU, ma se vuoi un URL prod, provaproduction_url=$(wp @prod eval "echo site_url();"); echo "The URL is $production_url";
jgraup

Che cosa fa esattamente wp db reset --yes? Ah ... cancella tutte le tabelle in modo che i nuovi file abbiano un db pulito. DB Reset
jgraup

1
Grazie per questo, ho preso la tua tecnica URL prod e l'ho modificata un po 'per rimuovere http: // dall'URL di produzione (in quanto ciò rende una ricerca più completa e sostituisce)
davemac

1
Nota anche che wp search-replacesupporta anche un --exportarg in modo da poter esportare e cercare / sostituire tutto in una volta: wp-cli.org/commands/search-replace
Weston Ruter
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.