O caminho mais rápido (menor quantidade de etapas) para importar localmente um banco de dados remoto usando o WP-CLI

10

Gostaria de automatizar a tarefa de importar um banco de dados remoto usando o WP-CLI .

O processo atual é ssh para o servidor e executar um export para arquivar usando WP-CLI , copie o arquivo para um diretório local através de scp ou rsync e, em seguida, import o arquivo por meio do WP -CLI Gostaria de utilizar um @alias e remover todos os passos possíveis aqui.

Embora eu queira pensar que algo assim é possível:

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

Com um tamanho de banco de dados > 5GB descomprimido, esta parece ser uma opção mais viável:

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

Infelizmente, eu posso estar atingindo os limites do terminal ou a estrutura dessa chamada deve ser limpa porque a minha janela parece estar travada.

Existe outra solução em que eu possa remover scp desse processo? Existe algum outro comando que eu possa utilizar aqui? Eu removi o multi-site dos exemplos aqui, mas isso também é algo a considerar que poderia fazer parte do alias.

Idealmente, espero que algo assim no futuro:

  

wp @local db import @remote

Exemplo de configuração atual do uso de @alias com Caixa Básica do 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

Atualizações

Bases em @davemac parece que esse processo poderia ser facilmente simplificado para

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

Agora, só preciso levar em consideração as tabelas 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();")

Usando search-replace - obrigado @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 - exporta um site remoto para uma importação local sem arquivos:

  

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 -

Similiar

por jgraup 13.08.2016 / 22:27

1 resposta

5

Desde WP-CLI 0.24.0 agora você pode usa aliases que permite importar um banco de dados remoto facilmente.

Usando aliases, você pode executar comandos do WP-CLI em outra instalação do WP-CLI. Essa instalação pode ser uma máquina remota.

Com isso em mente, eu juntei um apelido bash que une vários comandos WP-CLI para puxar um banco de dados WP remoto para um site local. Neste caso, eu tenho um arquivo wp-cli.yml local onde eu defini @prod como um alias para o meu site de produção (que usa um 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!"
}

Um comando pullprod no site atual do WP fará o que você precisa, assim como você tem o alias configurado (que também pode ser automatizado).

Funciona, mas minha próxima tarefa é melhorar como obtenho a variável $ production_url, já que atualmente estou puxando-a de um arquivo local.

    
por davemac 16.08.2016 / 10:49