Me gustaría automatizar la tarea de importar una base de datos remota utilizando la WP-CLI .
El proceso actual es al ssh
servidor, y ejecuta un export
archivo a usando WP-CLI , copia el archivo a un directorio local a través de scp
o rsync
, y luego import
el archivo a través de WP-CLI. Me gustaría utilizar un @alias
y 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 scp
este 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 @alias
con 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
- # 3162 - Soporte para usar el sistema de archivos local con
wp --ssh=<host>
- Sparks - Base de datos de sincronización
- Migrar un sitio de WordPress con wp-cli
- Migrar un sitio rápidamente con SSH y WP-CLI
- Complemento 10up / MU-Migration
- Cómo utilizar WP-CLI desde WordPress, no SSH
- ¿Existen métodos WP-CLI para get_current_blog_id, get_blog_details o $ wpdb-> prefix?
fuente
Respuestas:
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).
Un
pullprod
comando 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.
fuente
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";
wp db reset --yes
? Ah ... borra todas las tablas para que los nuevos archivos tengan una base de datos limpia. DB Resetwp search-replace
también es compatible con un--export
argumento para que pueda exportar y buscar / reemplazar todos a la vez: wp-cli.org/commands/search-replace