WP-CLI का उपयोग करके एक दूरस्थ डेटाबेस को स्थानीय रूप से आयात करने का सबसे तेज़ तरीका (कम से कम मात्रा में)


13

मैं WP-CLI का उपयोग करके एक दूरस्थ डेटाबेस आयात करने के कार्य को स्वचालित करना चाहूंगा ।

वर्तमान प्रक्रिया sshसर्वर के लिए है, और WP-CLIexport का उपयोग करके फ़ाइल को चलाने के लिए , फ़ाइल को स्थानीय निर्देशिका में या फिर WP-CLI के माध्यम से फ़ाइल की प्रतिलिपि बनाएँ । मैं एक का उपयोग करना चाहते हैं और यहाँ के रूप में संभव के रूप में कई चरणों को हटा दें।scprsyncimport@alias

जबकि मैं कुछ इस तरह सोचना संभव है:

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

DB आकार> 5GB असम्पीडित के साथ, यह एक अधिक व्यवहार्य विकल्प जैसा लगता है:

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


बेसिक वैग्रांट बॉक्स के@alias साथ उपयोग करने का वर्तमान उदाहरण सेटअप ।

~/.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 की तालिकाओं और 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- धन्यवाद @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 -


समान


आप एक bash स्क्रिप्ट लिख सकते हैं जिसे cron जॉब के जरिए रिमोट सर्वर से scp / rsync फाइल में लिखा जाता है। फिर रिमोट सर्वर पर आपके पास एक और बैश स्क्रिप्ट हो सकती है जो क्रोन जॉब से चलती है जो बैकअप फाइल के लिए फोल्डर देखती है और एक बार फाइल होने के बाद इसे रिमोट डीबी में आयात करेगी। यह एक समान है कि मैं सिंक में "हॉट स्टैंडबाय" सर्वर कैसे रखता हूं।
पीतल

मेरे लिए व्यक्तिगत रूप से, मैं क्रॉन जॉब में ऐसा नहीं करना चाहूंगा क्योंकि यह मिश्रण में एक और निर्भरता जोड़ता है और जब मैं इस पर काम कर रहा होता हूं तो रिमोट के साथ स्थानीय रूप से जुड़ने की कोशिश करना अधिक होता है। "रिमोट" कई उपनामों में से एक है - स्थानीय के साथ ही। फ़ंक्शन कॉल्स को कम करने का एक और कारण यह है कि मैं एक पंक्ति / कॉपी / पेस्ट / जाना पसंद करता हूं! कोड की पंक्तियाँ;)
जग्गू

क्या आपने डंप को एक चर के बजाय एक अस्थायी फ़ाइल में लिखने की कोशिश की है?
डेविड

इस तरह से आपको इसे अभी करने की आवश्यकता है जो फ़ाइल स्थानांतरण को संभालने के लिए WP-CLI के बाहर के कार्यों की आवश्यकता है --- और प्रति स्थान अधिक प्रमाणीकरण।
जगप

@ जग्गू क्या इस सवाल को हल किया गया है?
एथन जिंक्स ओ'सुल्लीवन

जवाबों:


6

WP-CLI 0.24.0 के बाद से अब आप उपनामों का उपयोग कर सकते हैं जो आपको एक दूरस्थ डेटाबेस को काफी आसानी से आयात करने में सक्षम बनाता है।

उपनाम का उपयोग करके, आप WP-CLI कमांड को किसी अन्य WP-CLI इंस्टॉल के खिलाफ चला सकते हैं। वह स्थापित रिमोट मशीन हो सकती है।

इसे ध्यान में रखते हुए मैंने एक bash उर्फ ​​को एक साथ हैक किया है जो एक दूरस्थ WP डेटाबेस को एक स्थानीय साइट में खींचने के लिए कई WP-CLI कमांड को एक साथ जोड़ता है। इस मामले में, मेरे पास एक स्थानीय wp-cli.yml फ़ाइल है जहाँ मैंने @prod को अपने उत्पादन स्थल के लिए एक उपनाम के रूप में सेट किया है (जो 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!"
}

pullprodवर्तमान WP साइट में एक कमांड वही करेगा जो आपको आवश्यक है, साथ ही आपके पास अन्य उपनाम स्थापित है (जिसे स्वचालित भी किया जा सकता है)।

यह काम करता है, लेकिन मेरा अगला कार्य यह है कि मैं $ production_url चर कैसे प्राप्त करूं, इसमें सुधार करूं क्योंकि वर्तमान में मैं इसे स्थानीय फ़ाइल से खींच रहा हूं।


यह भी खूब रही। ईमानदारी से, मैं वास्तव में सिर्फ देख रहा था wp @alias db export - > $localfilename.sql। यह एमयू-साइट्स के लिए थोड़ा अधिक जटिल हो जाता है, लेकिन अगर आप एक production_url=$(wp @prod eval "echo site_url();"); echo "The URL is $production_url";
प्रोडक्ट

वास्तव में क्या करता wp db reset --yesहै? आह ... सभी तालिकाओं को साफ़ करता है ताकि नई फ़ाइलों में एक साफ db हो। DB रीसेट
जगुआर

1
इसके लिए धन्यवाद, मैंने आपकी prod URL तकनीक को लिया और इसे http: // को प्रोडक्शन URL से हटाने के लिए थोड़ा संशोधित किया (क्योंकि यह अधिक व्यापक खोज और प्रतिस्थापन के लिए बनाता है)
davemac

1
ध्यान दें कि wp search-replaceयह भी एक --exportarg का समर्थन करता है ताकि आप एक बार में सभी को निर्यात और खोज / बदल सकें
Weston Ruter
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.