web-dev-qa-db-fra.com

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

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

Le processus actuel consiste à ssh sur le serveur et à exécuter un export dans un fichier à l'aide de WP-CLI , à copier le fichier dans un répertoire local via scp ou rsync , puis import le fichier via l'interface de ligne de commande WP-CLI. Je voudrais 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é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 suis peut-être en train de frapper 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 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 quelque chose comme ça à l'avenir:

wp @local db import @remote


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

Bases sur @davemac il semble que ce processus pourrait être facilement simplifié

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

Il ne me reste plus qu'à prendre en compte le tables et site_url de MU-Site

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();")

Utiliser 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

11
jgraup

Depuis WP-CLI 0.24.0 vous pouvez maintenant 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 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 tout 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 j'obtiens la variable $ production_url, car je la extrait actuellement d'un fichier local.

6
davemac