La forma más rápida (menor cantidad de pasos) para importar localmente una base de datos remota utilizando WP-CLI

13

Me gustaría automatizar la tarea de importar una base de datos remota utilizando la WP-CLI .

El proceso actual es al sshservidor, y ejecuta un exportarchivo a usando WP-CLI , copia el archivo a un directorio local a través de scpo rsync, y luego importel archivo a través de WP-CLI. Me gustaría utilizar un @aliasy eliminar tantos pasos como sea posible aquí.

Si bien me gustaría pensar que algo así es posible:

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

Con un tamaño de DB> 5GB sin comprimir, esta parece una opción más viable:

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

Desafortunadamente, puedo estar llegando a los límites de la terminal o la estructura de esta llamada debería limpiarse porque mi ventana parece bloquearse.

¿Hay alguna otra solución donde pueda eliminar scpeste proceso? ¿Hay algún otro comando que pueda utilizar aquí? He eliminado varios sitios de los ejemplos aquí, pero también es algo a considerar que podría ser parte del alias.

Idealmente, esperaría algo como esto en el futuro:

wp @local db import @remote


Configuración de ejemplo actual de uso @aliascon el cuadro 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

Actualizaciones

Basándose en @davemac , parece que este proceso podría simplificarse fácilmente para

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

Ahora solo necesito tener en cuenta las tablas de MU-Site y 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- gracias @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: exporte un sitio remoto a importación local sin archivos:

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 -


Similar

jgraup
fuente
Puede escribir un script bash que se llame a través del trabajo cron al archivo scp / rsync en el servidor remoto. Luego, en el servidor remoto, podría tener otro script bash que se ejecute a través de un trabajo cron que observe la carpeta para el archivo de copia de seguridad y una vez que el archivo esté allí, lo importará a la base de datos remota. Esto es similar a cómo mantengo sincronizado un servidor de "espera activa".
latón
Para mí, personalmente, no me gustaría hacer esto en un trabajo cron porque agrega otra dependencia a la mezcla y es más por tratar de sincronizarme localmente con remoto cuando estoy trabajando en ello. "Remoto" es uno de los muchos alias, lo mismo que local. ¡Otra razón para reducir las llamadas a funciones es porque me gusta una línea / copiar / pegar / ir! líneas de código;)
jgraup
¿Has intentado escribir el volcado en un archivo temporal en lugar de una variable?
David
Así es como debe hacerlo ahora, que requiere funciones fuera de WP-CLI para manejar la transferencia de archivos --- y más autenticación por ubicación.
jgraup
@jgraup ¿Se ha resuelto esta pregunta?
Ethan Jinks O'Sullivan

Respuestas:

6

Desde WP-CLI 0.24.0 ahora puede usar alias que le permiten importar una base de datos remota con bastante facilidad.

Mediante el uso de alias, puede ejecutar comandos WP-CLI en otra instalación de WP-CLI. Esa instalación podría ser una máquina remota.

Con esto en mente, pirateé un alias bash que encadena varios comandos WP-CLI para extraer una base de datos WP remota en un sitio local. En este caso, tengo un archivo local wp-cli.yml donde configuré @prod como un alias para mi sitio de producción (que usa 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 en el sitio actual de WP hará lo que necesite, junto con la configuración del alias (que también podría automatizarse).

Funciona, pero mi próxima tarea es mejorar la forma en que obtengo la variable $ production_url, ya que en este momento lo estoy extrayendo de un archivo local.

davemac
fuente
Esto es genial. Honestamente, solo estaba buscando el wp @alias db export - > $localfilename.sql. Se vuelve un poco más complicado para MU-Sites, pero si desea una URL de producto, intenteproduction_url=$(wp @prod eval "echo site_url();"); echo "The URL is $production_url";
jgraup
¿Qué hace exactamente wp db reset --yes? Ah ... borra todas las tablas para que los nuevos archivos tengan una base de datos limpia. DB Reset
jgraup
1
Gracias por eso, tomé su técnica de URL de producto y la modifiqué un poco para eliminar http: // de la URL de producción (ya que esto permite una búsqueda y reemplazo más completos)
davemac
1
Tenga en cuenta también que wp search-replacetambién es compatible con un --exportargumento para que pueda exportar y buscar / reemplazar todos a la vez: wp-cli.org/commands/search-replace
Weston Ruter