Le moyen le plus rapide (le moins d'étapes) pour importer localement une base de données distante à l'aide de WP-CLI

10

J'aimerais automatiser l'importation d'une base de données distante à l'aide de la WP-CLI .

Le processus actuel consiste à ssh sur le serveur et à exécuter un export à déposer à l'aide de WP-CLI , copiez le fichier dans un répertoire local via scp ou rsync , puis import le fichier via le WP. -CLI. J'aimerais utiliser un @alias et supprimer autant d'étapes que possible ici.

Bien que j'aimerais penser quelque chose comme ceci est possible:

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

Avec une taille de base de données > 5 Go non compressé, 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 se bloquer.

Existe-t-il une autre solution permettant de supprimer scp de ce processus? Existe-t-il d'autres commandes que je pourrais utiliser ici? J'ai supprimé le multisite des exemples ici, mais c'est aussi un élément à prendre en compte qui pourrait faire partie de l'alias.

Idéalement, j'espère que quelque chose comme ce sera le cas à l'avenir:

  

wp @local db import @remote

Exemple d'utilisation actuelle de @alias avec 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

Les bases sur @davemac semblent indiquer que ce processus pourrait facilement être simplifié en

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

Il me suffit maintenant de prendre en compte le tables 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 de 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 -

Similaire

posée jgraup 13.08.2016 - 22:27

1 réponse

5

Depuis que vous avez WP-CLI 0.24.0 , vous pouvez maintenant utiliser des alias qui vous permettent d'importer tout à fait une base de données distante 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 sur un site local. Dans ce cas, j’ai un fichier local wp-cli.yml dans lequel j’ai défini @prod comme alias de mon site de production (qui utilise 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!"
}

Une commande pullprod dans le site WP actuel fera ce que vous souhaitez, tout comme l’alias est configuré (ce qui pourrait également être automatisé).

Cela fonctionne, mais ma tâche suivante consiste à améliorer la façon dont je récupère la variable $ production_url, car je la extrait actuellement d’un fichier local.

    
réponse donnée davemac 16.08.2016 - 10:49

Lire d'autres questions sur les étiquettes