WP-CLI kullanarak uzak bir veritabanını yerel olarak içe aktarmanın en hızlı yolu (en az adım)


13

WP-CLI kullanarak uzak bir veritabanını içe aktarma görevini otomatikleştirmek istiyorum .

Geçerli işlem etmektir sshsunucuya ve bir çalıştırmak exportkullanarak dosyaya WP-CLI üzerinden yerel bir dizine dosyayı kopyalamak, scpveya rsync, sonra importWP-CLI yoluyla dosyası. @aliasBurada mümkün olduğunca çok adımı kullanmak ve kaldırmak istiyorum.

Ben böyle bir şey mümkün olduğunu düşünmek istiyorum iken:

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

DB boyutu> 5 GB sıkıştırılmamış olduğunda, bu daha uygun bir seçenek gibi görünür:

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

Ne yazık ki terminalin sınırlarını vuruyor olabilirim veya bu çağrının yapısı temizlenmeli çünkü pencerem asılmış görünüyor.

scpBu işlemden kaldırabileceğim başka bir çözüm var mı ? Burada kullanabileceğim başka komutlar var mı? Buradaki örneklerden çoklu siteyi kaldırdım, ancak bu aynı zamanda takma adın bir parçası olabilecek dikkate alınması gereken bir şey.

İdeal olarak, gelecekte böyle bir şey umarım:

wp @local db import @remote


Kullanmanın Güncel örneği kurulumu @aliasile Temel Serseri kutu .

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

Güncellemeler

Üzerinde Üs @davemac bu süreç kolaylıkla basitleştirilmiş olabilir gibi görünüyor

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

Şimdi MU-Site'nin tablolarını ve site_url'unu dikkate almam gerekiyor

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

Kullanma search-replace- teşekkürler @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 - uzak bir siteyi dosyasız yerel içe aktarmaya aktar:

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


Scp / rsync dosyasını uzak sunucuya cron işi ile çağrılan bir bash betiği yazabilirsiniz. Daha sonra uzak sunucuda, yedekleme dosyası için klasörü izleyen cron işi ile çalışan başka bir bash komut dosyasına sahip olabilirsiniz ve dosya bir kez orada olduğunda uzak DB'ye aktarır. Bu nasıl "sıcak bekleme" sunucusu senkronize tutmak benzer.
pirinç

Şahsen benim için, bunu bir cron işinde yapmak istemem çünkü karışıma başka bir bağımlılık ekliyor ve üzerinde çalıştığımda uzaktan uzaktan senkronize yerel olmaya çalışmak için daha fazla. "Uzak" birçok takma addan biri - yerel ile aynı. İşlev çağrılarını azaltmanın bir başka nedeni, tek satırlık / kopyala / yapıştır / git! kod satırları;)
jgraup

Dökümü bir değişken yerine geçici bir dosyaya yazmaya çalıştınız mı?
David

Dosya aktarımını işlemek için WP-CLI dışındaki işlevler ve konum başına daha fazla kimlik doğrulaması gerektiren şimdi bunu yapmanız gerekir.
jgraup

@jgraup Bu soru çözüldü mü?
Ethan Jinks O'Sullivan

Yanıtlar:


6

Yana WP-CLI 0.24.0 şimdi yapabilirsiniz takma adları kullanmak oldukça kolay bir uzak veritabanını almak için olanak sağlar.

Diğer adları kullanarak, WP-CLI komutlarını başka bir WP-CLI yüklemesine karşı çalıştırabilirsiniz. Bu kurulum uzak bir makine olabilir.

Bunu göz önünde bulundurarak, uzak bir WP veritabanını yerel bir siteye çekmek için birkaç WP-CLI komutunu zincirleyen bir bash takma adını birlikte hackledim. Bu durumda, @prod'u üretim siteme (SSH takma adı kullanan) takma ad olarak ayarladığım yerel bir wp-cli.yml dosyası var.

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!"
}

pullprodMevcut WP sitesindeki bir komut, takma ad ayarladığınız gibi (otomatikleştirilebilir) ihtiyacınız olanı yapar.

Çalışıyor, ancak bir sonraki görevim şu anda yerel bir dosyadan çektiğim gibi $ production_url değişkenini nasıl alacağımı geliştirmektir.


Bu harika. Dürüst olmak gerekirse ben gerçekten sadece arıyordu wp @alias db export - > $localfilename.sql. MU-Sites için biraz daha karmaşıklaşıyor, ancak bir ürün URL'si istiyorsanız, deneyinproduction_url=$(wp @prod eval "echo site_url();"); echo "The URL is $production_url";
jgraup

Tam olarak ne yapar wp db reset --yes? Ah ... tüm dosyaları temizler, böylece yeni dosyalar temiz bir db'ye sahiptir. DB Sıfırlama
jgraup

1
Bunun için teşekkürler, prod URL tekniğinizi aldım ve http: // üretim URL'sinden kaldırmak için biraz değiştirdim (bu daha kapsamlı bir arama ve değiştirme için yapar)
davemac

1
Ayrıca wp search-replacebir argümanı da desteklediğini unutmayın, --exportböylece hepsini bir kerede dışa aktarabilir ve arayabilir / değiştirebilirsiniz: wp-cli.org/commands/search-replace
Weston Ruter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.