Je voudrais automatiser la tâche d'importation d'une base de données distante à l'aide de WP-CLI .
Le processus en cours consiste à ssh
accéder au serveur et à exécuter un export
fichier à l'aide de WP-CLI , copiez le fichier dans un répertoire local via scp
ou rsync
, puis import
le fichier via WP-CLI. Je voudrais utiliser un @alias
et supprimer autant d'étapes que possible ici.
Alors que je voudrais penser que quelque chose comme ça est possible:
echo "$(wp @remote db export -)" | wp @local db import -
Avec une taille de base de données> 5 Go non compressée, cela semble être une option plus viable:
DB_EXPORT=$(echo "$(wp @remote db export -)" | gzip | base64 -w0); echo "$DB_EXPORT" | base64 -d | gunzip | wp @local db import -
Malheureusement, je peux atteindre les limites du terminal ou la structure de cet appel doit être nettoyée car ma fenêtre semble juste se bloquer.
Existe-t-il une autre solution que je peux supprimer scp
de ce processus? Y a-t-il d'autres commandes que je pourrais utiliser ici? J'ai supprimé plusieurs sites des exemples ici, mais c'est aussi quelque chose à considérer qui pourrait faire partie de l'alias.
Idéalement, j'espère quelque chose comme ça à l'avenir:
wp @local db import @remote
Exemple de configuration actuelle d'utilisation @alias
avec la boîte 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
Mises à jour
Sur la base de @davemac, il semble que ce processus pourrait facilement être simplifié pour
wp db import - <<< $(wp db export -);
Maintenant, je dois juste prendre en compte les tables de MU-Site et 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();")
Utilisation search-replace
- merci @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 - exportez un site distant vers une importation locale sans fichiers:
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
- # 3162 - Prise en charge de l'utilisation du système de fichiers local avec
wp --ssh=<host>
- Sparks - Base de données de synchronisation
- Migration d'un site WordPress avec wp-cli
- Migration rapide d'un site avec SSH et WP-CLI
- Plugin 10up / MU-Migration
- Comment utiliser WP-CLI depuis WordPress, pas SSH
- Existe-t-il des méthodes WP-CLI pour le préfixe get_current_blog_id, get_blog_details ou $ wpdb->?
la source
Réponses:
Depuis WP-CLI 0.24.0, vous pouvez désormais utiliser des alias qui vous permettent d'importer une base de données distante assez facilement.
En utilisant des alias, vous pouvez exécuter des commandes WP-CLI sur une autre installation WP-CLI. Cette installation pourrait être une machine distante.
Dans cet esprit, j'ai piraté un alias bash qui enchaîne plusieurs commandes WP-CLI pour extraire une base de données WP distante dans un site local. Dans ce cas, j'ai un fichier wp-cli.yml local où j'ai défini @prod comme alias sur mon site de production (qui utilise un alias SSH).
Une
pullprod
commande dans le site WP actuel fera ce dont vous avez besoin, tout comme vous avez configuré l'alias (qui pourrait également être automatisé).Cela fonctionne, mais ma prochaine tâche consiste à améliorer la façon dont j'obtiens la variable $ production_url, car actuellement je la tire d'un fichier local.
la source
wp @alias db export - > $localfilename.sql
. Cela devient un peu plus compliqué pour MU-Sites, mais si vous voulez une URL de prod, essayezproduction_url=$(wp @prod eval "echo site_url();"); echo "The URL is $production_url";
wp db reset --yes
? Ah ... efface toutes les tables pour que les nouveaux fichiers aient une base de données propre. DB Resetwp search-replace
prend également en charge un--export
argument afin que vous puissiez exporter et rechercher / remplacer tout à la fois: wp-cli.org/commands/search-replace