web-dev-qa-db-ja.com

WP-CLIを使用してリモートデータベースをローカルにインポートするための最速の方法(最小ステップ数)

WP-CLI を使用してリモートデータベースをインポートする作業を自動化したいのですが。

現在のプロセスはサーバーに対して ssh であり、 WP-CLI を使用して export ファイルを実行し、 scp または rsyncを介してファイルをローカルディレクトリにコピーします。 、そして import WP-CLIを通してファイル。 @alias を利用して、ここでできるだけ多くのステップを削除したいと思います。

私はこのようなことが可能であると考えたいのですが:

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

5 GBを超えるDBサイズが圧縮されていない場合、これはより現実的な選択肢のように思えます。

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

あいにく私は端末の限界に当たっているかもしれませんし、あるいはこの呼び出しの構造は片付けられるべきです私のウィンドウはちょうどハングしているようです。

このプロセスからscpを削除できる別の解決策はありますか?ここで利用できる他のコマンドはありますか?ここでは例からマルチサイトを削除しましたが、それはエイリアスの一部になる可能性のある考慮すべき点でもあります。

理想的には、私は将来的にこのような何かを願っています:

wp @local db import @remote


@aliasBasic Vagrant box と共に使用する現在の設定例。

~/.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

アップデート

@davemac /このプロセスは簡単に次のように単純化できるように見えます。

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

今、私はMU-Siteの tablesと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();")

search-replaceを使用する - thanks @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マルチサイト - ファイルを使用せずにリモートサイトをローカルインポートにエクスポートします。

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 -


よく似ている

11
jgraup

WP-CLI 0.24.0 以降、 エイリアス を使用することで、リモートデータベースを非常に簡単にインポートできます。

別名を使用すると、別のWP-CLIインストールに対してWP-CLIコマンドを実行できます。そのインストールはリモートマシンかもしれません。

これを念頭に置いて、リモートWPデータベースをローカルサイトに取り込むためにいくつかのWP-CLIコマンドをチェーンするbashエイリアスをまとめました。この場合、私はプロダクションサイトのエイリアスとして@prodを設定したローカルのwp-cli.ymlファイルを持っています(これは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!"
}

現在のWPサイトにあるpullprodコマンドは、エイリアスが設定されているので、必要なことを実行します(これも自動化することができます)。

それはうまくいきますが、私の次の仕事は、$ production_url変数の取得方法を改善することです。現時点では、ローカルファイルからそれを取得しています。

6
davemac