मेरा डेटाबेस आयात पाठ विजेट डेटा क्यों खो रहा है?


46

मैंने हमारी विकास मशीन पर वर्डप्रेस में एक साइट बनाई है। हम जिस विषय का उपयोग कर रहे हैं, उसमें (साइडबार और फ्रंट पेज) टेक्स्ट प्रदर्शित करने के लिए कई विजेट ज़ोन हैं। मैंने अपनी प्रदर्शन जानकारी डालने के लिए इन सभी क्षेत्रों में सरल पाठ विजेट का उपयोग किया है।

जब मैंने उत्पादन के लिए साइट को माइग्रेट किया, तो मैंने डेटाबेस का स्नैपशॉट लेने के लिए WP-DB-Backup प्लगइन का उपयोग किया। फिर हमने परिणामी .sql फ़ाइल को हमारे उत्पादन साइट पर इंगित करने के लिए सभी फ़ाइल पथों और URL संदर्भों को अपडेट करने के लिए संपादित किया।

डेटाबेस, वेबसाइट बनाने और उत्पादन साइट पर सभी फ़ाइलों की प्रतिलिपि बनाने के बाद, मैं mysql कमांड प्रॉम्प्ट से .sql फ़ाइल को नए डेटाबेस में डेटा आयात करने के लिए चलाता हूं।

हालांकि, जब मैं प्रोडक्शन साइट पर जाता हूं, तो कुछ टेक्स्ट दिखाई देते हैं और कुछ नहीं। जब मैं साइट के विजेट अनुभाग में देखता हूं, तो टेक्स्ट विजेट विजेट के कुछ क्षेत्रों से गायब हैं। पाठ विजेट "निष्क्रिय विजेट" क्षेत्र में भी दिखाई नहीं देते हैं, वे बस वहां नहीं हैं।

मैंने भी BackWPup प्लगइन का उपयोग करके प्रक्रिया को दोहराने की कोशिश की है, यह देखते हुए कि SQL सिंटैक्स अलग है जब यह डेटाबेस को डंप करता है।

मैं आयात के दौरान पाठ विजेट डेटा क्यों खो रहा हूं?


मैं रास्ते में कुछ खुदाई कर रहा हूं, और केवल एक चीज जो मैं सोच सकता हूं, वह यह है कि विजेट जानकारी को wp_options तालिका में संग्रहीत किया जा रहा है, जो अपने कुछ डेटा को एक अजीब तरीके से सांकेतिक शब्दों में बदलना चाहता है। मैं यह देखने के लिए एक अलग विषय के साथ अभी तक कोशिश नहीं कर पाया कि क्या यह विषय से संबंधित है।
दिली-ओ

जवाबों:


44

यह वह जगह है जहाँ आपकी समस्या है:

फिर हमने परिणामी .sql फ़ाइल को हमारे उत्पादन साइट पर इंगित करने के लिए सभी फ़ाइल पथों और URL संदर्भों को अपडेट करने के लिए संपादित किया।

आप ऐसा नहीं कर सकते। वर्डप्रेस कई विकल्पों को "क्रमबद्ध डेटा" के रूप में संग्रहीत करता है, जिसमें चीजों की स्ट्रिंग सामग्री और उनकी लंबाई दोनों शामिल हैं । इसलिए जब आप URL को संशोधित करते हैं और लंबाई बदल जाती है, तो क्रमबद्ध डेटा अब सही नहीं है, और PHP इसे अस्वीकार कर देता है।

दीर्घकालिक समस्या यह है कि, मूल रूप से, आप इसे गलत कर रहे हैं। यदि आप एक विकास साइट स्थापित कर रहे हैं, जिसका डेटा माइग्रेट हो जाएगा, तो उसके ठीक उसी URL का होना चाहिए, जिसके साथ आपकी उत्पादन साइट शुरू होनी चाहिए। आप उस उत्पादन डोमेन (जैसे example.com) को एक भिन्न IP पता (जैसे 127.0.0.1) देने के लिए अपनी HOSTS फ़ाइल को मैन्युअल रूप से संपादित कर सकते हैं और इस प्रकार "उत्पादन" URL केवल आपके लिए, विकास स्थल बन जाएगा। फिर आप उस उत्पादन URL का उपयोग करके अपना डेटा और लिंक और बाकी सब कुछ बना सकते हैं, और जब आप डेटा स्थानांतरित करते हैं, तो इसके बारे में कुछ भी नहीं बदलना पड़ता है।

हालांकि, अल्पावधि में, एसक्यूएल फ़ाइल पर एक साधारण पाठ खोज / प्रतिस्थापन का उपयोग न करें। जैसा कि आपने खोजा है, यह चीजों को तोड़ता है।

और जब मैं यह सुझाव देने में संकोच करता हूं, तो इन टूटी हुई क्रमबद्धताओं को संभालने के लिए वर्डप्रेस कोर कोड को बदलने का एक तरीका है। आपको wp- / / functions.php फ़ाइल को संशोधित करना होगा और इसके लिए if_unserialize () फ़ंक्शन को बदलना होगा:

function maybe_unserialize( $original ) {
    if ( is_serialized( $original ) ) {
        $fixed = preg_replace_callback(
            '!(?<=^|;)s:(\d+)(?=:"(.*?)";(?:}|a:|s:|b:|i:|o:|N;))!s',
            'serialize_fix_callback',
            $original );
        return @unserialize( $fixed );
    }
    return $original;
}
function serialize_fix_callback($match) { return 's:' . strlen($match[2]); }  

यह एक व्यवहार्य दीर्घकालिक समाधान नहीं है। इसका उपयोग केवल आपको उठने और अभी काम करने के लिए किया जाना चाहिए। लंबे समय में, आपको अपनी विकास प्रक्रिया को ठीक करने की आवश्यकता है ताकि शुरुआत करने के लिए आपको इस प्रकार का URL मुंगिंग न करना पड़े।


@ बहुत बढ़िया जवाब। त्वरित प्रश्न, क्या MySql के बाहर wp_posts की तरह कोई गैर-अनुक्रमित बूँद / पाठ तालिका को संशोधित करना wp_post_meta या wp_options में किसी भी क्रमबद्ध डेटा को प्रभावित करेगा? मुझे टेक्स्ट विजेट के साथ भी यही समस्या थी लेकिन मैंने wp_options को नहीं छुआ था मैंने केवल wp_posts को संशोधित किया था।
क्रिस_ओ

वाह, मुझे कभी एहसास नहीं हुआ कि डेटा के साथ क्या हो रहा था, लेकिन यह पूरी तरह से समझ में आता है! बहुत धन्यवाद!
दिली-ओ

4
एक और वर्कअराउंड जिसका उपयोग कुछ लोग अपनी विकास प्रणाली को बनाने के लिए करते हैं, का एक डोमेन नाम "example.dev" है बजाय "example.com"। इस तरह, जब वे उन्हें उत्पादन के लिए ले जाते हैं, तो स्ट्रिंग्स के लिए लंबाई नहीं बदलती है। मैं HOSTS फ़ाइल विधि पसंद करता हूं।
ओटो

3
2016 और wordrepss अभी भी डेटाबेस में क्रमबद्ध डेटा सहेज रहे हैं। most famous worst codeपुरस्कार को आगे नहीं देखना है।
एजाज़

1
धन्यवाद!!! अच्छा बिंदु और महान हैक। सामान्य तौर पर मुझे यह हैक सभी डेटा वापस करने के लिए मिलता है और उसके बाद बस मौजूदा सेटिंग्स को फिर से अपडेट करें और जब इस कोड को सही हटा दें।
इविज़न स्टीफन स्टिपिक

10

इस समस्या से निपटने के लिए मैं हमेशा WordPress Serialized Search & Replace टूल का उपयोग करता हूं । यह किसी भी मुद्दे के साथ पूरी तरह से ठीक काम करता है। मैं अपने सभी साइट माइग्रेशन आवश्यकताओं पर लंबे समय से इसका उपयोग कर रहा हूं। यह वास्तव में विकास के लिए डेटाबेस के उत्पादन के साथ मुद्दों का ध्यान रखता है।

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/


1
हाँ इस लिपि का वर्षों से उपयोग कर रहे हैं और अत्यधिक अनुशंसा करते हैं
davemac

ज्यादातर समय मेरे लिए काम किया। लेकिन इस हफ्ते जब मैंने v 3.0.0 का उपयोग http://localhost/Me/site_nameकरके http://site.dev(एक स्थानीय होस्ट से दूसरे में) बदला तो मैंने अपने विजेट और मेनू पदों को अजीब तरह से खो दिया। तो शायद यह मुद्दा स्ट्रिंग के रूप में अच्छी तरह से संबंधित है।
खंड

मैं उपयोग कर रहा हूँ .. लेकिन अभी तक इस स्थिति का सामना नहीं किया। क्या आप इस स्क्रिप्ट का पुराना संस्करण डाउनलोड कर सकते हैं और फिर से कोशिश कर सकते हैं। के localhost/Me/site_nameसाथ बदलने की कोशिश करें site.dev
सुभ्रजन १ '

यूआरएल बदल गया है (अब http के बजाय https): interconnectit.com/products/…
Koryonik

भव्य लिपि। मैंने PHPMyAdmin से एक MySQL डेटाबेस को पुराने से नए URL के -no परिवर्तन के लिए जो भी हो, डुप्लिकेट किया- फिर, नई साइट के फ़ोल्डर में गया जहाँ ताज़ा WP फाइलें थीं (एक उचित wp-config-.php के साथ) नई डीबी क्रेडेंशियल्स), स्क्रिप्ट को जोड़ा, और इसने सब कुछ का ख्याल रखा। सीरियलाइज्ड डेटा को सामान्य URL के साथ अपडेट किया जाता है। आसान और त्वरित! अत्यधिक सिफारिशित। महत्वपूर्ण: इसका उपयोग करने के बाद स्क्रिप्ट को निकालना न भूलें क्योंकि इसका आपके डीबी विवरण तक पहुंच है!
मूंगफली

7

ओटो का जवाब हाजिर है। मैंने भी इसका कठिन तरीका खोजा।

हालाँकि, मैं http://spectacu.la/search-and-replace-for-wordpress-dat डेटाबेस/ पर एक शांत स्क्रिप्ट का उपयोग करके इसके चारों ओर काम करने में कामयाब रहा।

अपने WordPress और एक नए url / डोमेन नाम पर माइग्रेट करने के लिए, निम्न कार्य करें:

  1. मौजूदा वर्डप्रेस का DB डंप (जैसे phpmyadmin का उपयोग करके) लें
  2. अपने नए स्थान पर डंप को फिर से स्थापित करें, (संशोधनों की कोई आवश्यकता नहीं)
  3. अपने वर्डप्रेस होम फोल्डर में spectacu.la से स्क्रिप्ट को अनज़िप करें (यह एक प्लगइन नहीं है ...)
  4. अपनी नई साइट पर स्क्रिप्ट को अपने ब्राउज़र को इंगित करके चलाएं, जैसे http: //new-website.url/searchreplacedb.php
  5. अपने नए वर्डप्रेस होम से स्क्रिप्ट को हटाना न भूलें

1
मुझे पता है कि यह पुराना है, लेकिन अगर मैं डंप को पुनर्स्थापित कर रहा हूं तो मुझे नए डेटाबेस नाम को निर्दिष्ट करने की आवश्यकता कहां है? क्या मुझे नए डेटाबेस का नाम कम से कम दूसरे चरण में नहीं डालना चाहिए? इस जानकारी के लिए धन्यवाद
andresmijares

मुझे यकीन नहीं है कि मैं आपके सवाल को पूरी तरह से समझ पा रहा हूं। डेटाबेस को पुनर्स्थापित करना phpmyadmin जैसे उपकरणों के साथ किया जा सकता है और आप इसे एक नया नाम दे सकते हैं, या पुराने नाम का उपयोग कर सकते हैं। मैंने जिस स्क्रिप्ट का उल्लेख किया है वह पहले से ही बहाल होने के बाद डेटाबेस के अंदर पाठ को बदलता है।
योव अनेर

हाय योव, उत्तर के लिए धन्यवाद, मेरा मतलब है, जब मैं एक डीबी निर्यात करता हूं मैं सामान्य रूप से डेटाबेस नाम को नए में बदल देता हूं और डोमेन लिंक को बदल देता हूं। यह कहा, उर चरण संख्या दो पर आप कहते हैं कि डंप को फिर से स्थापित करना है-डब्ल्यू / ओ संशोधनों के रूप में, मैं सिर्फ यह जानना चाहता था कि क्या शाब्दिक रूप से, या मुझे डेटाबेस का नाम कम से कम बदलना है। मुझे पता है कि यह एक डमी सवाल हो सकता है, मैं सिर्फ एक तरह से खो गया हूं, उर जवाब के लिए फिर से धन्यवाद
andresmijares

मुझे नहीं पता कि आप अपने डेटाबेस को कैसे डंप करते हैं, लेकिन अगर आप phpmyadmin 'Export' टूल का उपयोग करते हैं, तो इससे कोई फर्क नहीं पड़ता कि यह कौन सा डेटाबेस नाम है। आप निर्यात का उपयोग कर सकते हैं और इसे किसी अन्य डेटाबेस में वापस आयात कर सकते हैं। आमतौर पर, बुलेट-पॉइंट 2 के बारे में, मुझे लगता है कि डेटाबेस का नाम बदलना ठीक है।
योआव अनर

2

डेटाबेस निर्यात फ़ाइल पर एक खोज-और-प्रतिस्थापन करते समय ओपी बहुत ही कमज़ोर हो गया था, और कुछ क्रमबद्ध डेटा के भीतर "wp_" की बदलती घटनाओं को समाप्त कर दिया। इसका समाधान खोज-में-जगह और नियमित अभिव्यक्ति के भीतर बैकटिक को शामिल करके और फिर मैन्युअल रूप से आयात के बाद डेटाबेस में शेष कुंजियों को अपडेट करना है।

यदि आप उपसर्ग को स्थानांतरित कर रहे हैं और बदल रहे हैं, और अधिक मैन्युअल दृष्टिकोण की तरह, तो निम्न करें (यह केवल ओपीएस चिंताओं को संबोधित करता है और साइट URL को अपडेट करने से संबंधित नहीं है)

  1. बैकअप और अपने डेटाबेस निर्यात SQL फ़ाइल को नए वातावरण में स्थानांतरित करें (मेरा उदाहरण backup_YYYY-MM-DD.sql का फ़ाइल नाम मानता है)
  2. अपने नए उपसर्ग (अपनी SQL फ़ाइल को आयात करने के लिए PRIOR) का उपयोग करने के लिए तालिका नामों को बदलने के लिए SQL फ़ाइल पर एक बड़े पैमाने पर खोज-और-जगह करें!)। ऐसा करने का एक तरीका एक पर्ल वन-लाइनर का उपयोग करना होगा: perl -p -i.bak -e "s /` wp_ / `myprefix_ / g" backup_YYYY-MM-DD.qql
  3. डेटाबेस में अपने SQL डेटा आयात करें
  4. उन सभी कुंजियों को अपडेट करें, जिनमें उपसर्ग हार्ड-कोडित है।
  5. _User_meta के भीतर किसी भी कुंजी को अपडेट करें जिसमें हार्ड-कोडित उपसर्ग शामिल हो: myprefix_usermeta सेट मेटा / आइस = कॉनैट ('myprefix _', root (meta_key, 4)) को अपडेट करें जहां 'wp_%' की तरह met_

0

मैंने WP माइग्रेट प्लगइन का उपयोग किया , डायन http और फ़ोल्डर पैच की जगह लेती है। आयात करते समय मुझे एक ही समस्या हुई, लेकिन उत्पन्न वर्ग के शीर्ष पर निम्न पंक्तियाँ डालने का समाधान किया गया:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

मैंने @Yoav द्वारा उत्तर दिए गए खोज और प्रतिस्थापन उपकरण (v2.1) के साथ भी कोशिश की, लेकिन यह अभी भी मेरे क्रमबद्ध डेटा को तोड़ता है।


हाय रिकार्डो, वर्डप्रेस जवाब में आपका स्वागत है! आपके द्वारा पोस्ट किया गया क्षेत्र मूल प्रश्न के उत्तर के लिए आरक्षित है। भले ही आपका प्रश्न संबंधित हो, आपको इसे एक अलग प्रश्न के रूप में पोस्ट करना चाहिए। आपको इस तरह से उत्तर देने का बहुत बेहतर मौका मिलेगा।
क्रिस_ओ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.