আমার ডাটাবেস আমদানি পাঠ্য উইজেট ডেটা হারাচ্ছে কেন?


46

আমি আমাদের বিকাশ মেশিনে ওয়ার্ডপ্রেসে একটি সাইট তৈরি করেছি। থিমটিতে আমরা ব্যবহার করছি পাঠ্য প্রদর্শন করার জন্য অসংখ্য উইজেট অঞ্চল (সাইডবার এবং প্রথম পৃষ্ঠা)। আমি আমাদের প্রদর্শন তথ্য রাখার জন্য এই সমস্ত জোনে সাধারণ পাঠ্য উইজেট ব্যবহার করেছি।

আমি যখন সাইটটি উত্পাদনে স্থানান্তরিত করেছিলাম তখন আমি ডাব্লুপি-ডিবি-ব্যাকআপ প্লাগইন ব্যবহার করে ডেটাবেজের স্ন্যাপশট নিতে পারি। তারপরে আমি আমাদের উত্পাদন সাইটের দিকে নির্দেশ করার জন্য সমস্ত ফাইল পাথ এবং ইউআরএল রেফারেন্স আপডেট করার জন্য ফলাফল। এসকিউএল ফাইল সম্পাদনা করেছি।

ডেটাবেস, ওয়েবসাইট তৈরি এবং প্রোডাকশন সাইটে সমস্ত ফাইল অনুলিপি করার পরে, আমি নতুন ডাটাবেসে ডেটা আমদানি করার জন্য মাইএসকিএল কমান্ড প্রম্পট থেকে .sql ফাইলটি চালিত করি।

যাইহোক, আমি যখন প্রোডাকশন সাইটে যাই তখন কিছু লেখা প্রদর্শিত হয় এবং এর কিছু হয় না। আমি যখন সাইটের উইজেট বিভাগগুলি সন্ধান করি তখন কিছু উইজেট অঞ্চল থেকে পাঠ্য উইজেটগুলি অনুপস্থিত। পাঠ্য উইজেটগুলি এমনকি "নিষ্ক্রিয় উইজেট" জোনে দৃশ্যমান নয়, তারা কেবল সেখানে নেই।

এমনকি ব্যাকডব্লুপআপ প্লাগইন ব্যবহার করে প্রক্রিয়াটি পুনরাবৃত্তি করার চেষ্টা করেছি, লক্ষ্য করে যে এসকিউএল সিনট্যাক্সটি যখন ডেটাবেসটি সরিয়ে দেয় তখন আলাদা হয়।

আমদানির সময় আমি কেন পাঠ্য উইজেট ডেটা হারাচ্ছি?


আমি পথে কিছু খোঁড়াখুঁড়ি করছি, এবং কেবলমাত্র আমি ভাবতে পারি যে উইজেট সম্পর্কিত তথ্য wp_options টেবিলের মধ্যে সংরক্ষণ করা হচ্ছে, যা তার কিছু তথ্যকে একটি অদ্ভুত উপায়ে এনকোড করে দেখায়। এটি এখনও থিম সম্পর্কিত কিনা তা দেখতে আমি আলাদা থিমের সাহায্যে চেষ্টা করতে পারিনি।
ডিলি-ও

উত্তর:


44

আপনার সমস্যাটি এখানেই:

তারপরে আমি আমাদের উত্পাদন সাইটের দিকে নির্দেশ করার জন্য সমস্ত ফাইল পাথ এবং ইউআরএল রেফারেন্স আপডেট করার জন্য ফলাফল। এসকিউএল ফাইল সম্পাদনা করেছি।

আপনি এটা করতে পারবেন না। ওয়ার্ডপ্রেস অনেকগুলি বিকল্পকে "সিরিয়ালযুক্ত ডেটা" হিসাবে সংরক্ষণ করে, এতে জিনিসগুলির স্ট্রিং সামগ্রী এবং তাদের দৈর্ঘ্য উভয়ই থাকে । সুতরাং আপনি যখন URL টি সংশোধন করেন এবং দৈর্ঘ্যের পরিবর্তন হয়, তখন ক্রমিকিত ডেটা আর সঠিক হয় না এবং পিএইচপি এটিকে প্রত্যাখ্যান করে।

দীর্ঘমেয়াদী সমস্যাটি হ'ল মূলত, আপনি এটি ভুল করছেন। আপনি যদি এমন কোনও ডেভেলপমেন্ট সাইট স্থাপন করেন যা এর ডেটা স্থানান্তরিত করে, তবে এটির সাথে আপনার প্রোডাকশন সাইটের মতো ঠিক একই URL থাকা উচিত। সেই উত্পাদন ডোমেনকে (উদাহরণ.কমের মত) আলাদা আইপি ঠিকানা দিতে (127.0.0.1 এর মত) দিতে আপনি নিজের HOSTS ফাইলটি ম্যানুয়ালি সম্পাদনা করতে পারেন এবং এইভাবে "উত্পাদন" URL কেবলমাত্র আপনার জন্য বিকাশ সাইট হয়ে উঠবে। তারপরে আপনি সেই ডেটা এবং লিঙ্ক এবং সেই উত্পাদন URL টি ব্যবহার করে যা কিছু তৈরি করতে পারেন এবং আপনি যখন ডেটা মাইগ্রেশন করেন তখন এগুলির কিছুই পরিবর্তন করতে হয় না।

স্বল্পমেয়াদে, এসকিউএল ফাইলটিতে কোনও সাধারণ পাঠ্য অনুসন্ধান / প্রতিস্থাপন ব্যবহার করবেন না। যেমন আপনি আবিষ্কার করেছেন, এটি জিনিসগুলিকে ভেঙে দেয়।

এবং আমি এটির পরামর্শ দিতে দ্বিধা বোধ করার সময়, এই ভাঙা সিরিয়ালাইজেশনগুলি পরিচালনা করার জন্য ওয়ার্ডপ্রেস কোর কোডকে পরিবর্তন করার একটি উপায় রয়েছে। আপনাকে ডাব্লুপি-অন্তর্ভুক্ত / ফাংশন.এফপি ফাইলটি সংশোধন করতে হবে এবং সম্ভবত_উনসায়ারালাইজ () ফাংশনটিকে এটিতে পরিবর্তন করতে হবে:

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]); }  

এটি একটি কার্যকর টেকসই সমাধান নয়। এটি আপনাকে এখনই উঠতে এবং এই মুহুর্তে কাজ করতে ব্যবহার করা উচিত। দীর্ঘমেয়াদে, আপনাকে আপনার বিকাশ প্রক্রিয়াটি ঠিক করতে হবে যাতে শুরু করার জন্য আপনাকে এই ধরণের ইউআরএল মুং করতে হবে না।


@ খুব ভাল উত্তর। তাত্ক্ষণিক প্রশ্ন, মাইএসকিউএল এর বাইরে ডাব্লুপি_পোস্টের মতো কোনও অ সিরিয়ালযুক্ত ব্লব / পাঠ্য সারণীটি সংশোধন করা কি ডাব্লুপি_পোস্ট_মেটা বা ডাব্লুপিওপশনগুলিতে সিরিয়ালযুক্ত ডেটাগুলির কোনও প্রভাব ফেলবে? পাঠ্য উইজেট নিয়ে আমার একই সমস্যা ছিল তবে আমি কেবল wp_posts সংশোধন করে wp_options স্পর্শ করিনি।
ক্রিস_ও

বাহ, আমি কখনই বুঝতে পারি নি যে এটি ডেটা দিয়ে কী ঘটছিল, তবে এটি পুরোপুরি বোঝায়! অনেক ধন্যবাদ!
ডিলি-ও

4
কিছু লোক ব্যবহার করে যা কিছু লোক ব্যবহার করে তাদের বিকাশের সিস্টেমে "উদাহরণ.কম" এর পরিবর্তে "উদাহরণ.দেব" এর একটি ডোমেন নাম তৈরি করা have এইভাবে, স্ট্রিংগুলিকে তারা যখন উত্পাদনে নিয়ে যায় তখন দৈর্ঘ্য পরিবর্তন হয় না। আমি HOSTS ফাইল পদ্ধতিটি পছন্দ করি।
অটো

3
2016 এবং ওয়ার্ডপ্রেস এখনও ডাটাবেসে সিরিয়ালযুক্ত ডেটা সংরক্ষণ করছে। most famous worst codeপুরষ্কার আর দেখতে হবে না।
এজাজ

1
ধন্যবাদ!!! ভাল পয়েন্ট এবং দুর্দান্ত হ্যাক। উত্সাহীনভাবে আমি সমস্ত ডেটা ফেরত পেতে এই হ্যাকটি পাই এবং তারপরে আবার বিদ্যমান সেটিংস আপডেট করে এবং যখন এই কোডটি সরিয়ে নিখুঁত কাজ করে।
আইভিজান স্টিফান স্টিপিয়ি

10

এই সমস্যাটি মোকাবেলায় আমি সর্বদা এখানে সরবরাহিত ওয়ার্ডপ্রেস সিরিয়ালাইজড অনুসন্ধান এবং প্রতিস্থাপন সরঞ্জামটি ব্যবহার করি । এটি যে কোনও সমস্যা নিয়ে পুরোপুরি সূক্ষ্ম কাজ করে। আমি আমার সাইট মাইগ্রেশন প্রয়োজনীয়তার উপর এটি দীর্ঘকাল ধরে ব্যবহার করে আসছি। এটি ডেভলপমেন্ট ডেটাবেসকে উত্পাদনে স্থানান্তরিত করার সাথে সম্পর্কিত বিষয়গুলির সত্যই যত্ন নিতে পারে।

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


1
হ্যাঁ এই স্ক্রিপ্টটি বছরের পর বছর ধরে ব্যবহার করা হয়েছে এবং এটির জন্য উচ্চ সুপারিশ করুন
ডেভাম্যাক

বেশিরভাগ সময় আমার জন্য কাজ করেছেন। কিন্তু এই সপ্তাহে আমি ভি 3.0.0 ব্যবহার http://localhost/Me/site_nameকরে http://site.dev(এক স্থানীয় হোস্ট থেকে অন্য স্থানীয়তে প্রতিস্থাপন করেছি ) আমি আমার উইজেট এবং মেনু অবস্থানগুলি অদ্ভুতভাবে হারাতে পারি নি। সুতরাং সম্ভবত এই সমস্যাটি স্ট্রিং দৈর্ঘ্যের সাথেও সম্পর্কিত।
রান্ড

আমি ব্যবহার করে যাচ্ছি .. তবে এখনও কখনও এই পরিস্থিতির মুখোমুখি হইনি। আপনি কি এই স্ক্রিপ্টের পুরানো সংস্করণটি ডাউনলোড করতে পারেন এবং এটি দিয়ে আবার চেষ্টা করতে পারেন। এর localhost/Me/site_nameসাথে প্রতিস্থাপনের চেষ্টা করুন site.dev
সুভরঞ্জন

ইউআরএল পরিবর্তিত হয়েছে (এখন HTTP এর পরিবর্তে https): আন্তঃসংযোগ
প্রোডাক্টস /…

চমত্কার লিপি। আমি পিএইচপিএমইএইডমিন থেকে কোনও মাইএসকিউএল ডাটাবেসটি নকল করেছি পুরানো থেকে নতুন ইউআরএল-তে যে কোনও পরিবর্তন নেই - তারপরে নতুন সাইটের ফোল্ডারে গেলাম যেখানে তাজা ডাব্লুপি ফাইলগুলি ছিল (একটি সঠিক ডাব্লুপি-কনফিগারেশন.এফপি পাশাপাশি) নতুন ডিবি শংসাপত্রগুলি), স্ক্রিপ্টটি যুক্ত করেছে এবং এটি সমস্ত কিছুর যত্ন নিয়েছে। সিরিয়ালযুক্ত ডেটা স্বাভাবিক ইউআরএল সহ আপডেট করা হয়। সহজ এবং দ্রুত! অত্যন্ত বাঞ্ছনীয়. গুরুত্বপূর্ণ: স্ক্রিপ্টটি ব্যবহারের পরে এটি সরিয়ে ফেলতে ভুলবেন না কারণ এতে আপনার ডিবি বিবরণ অ্যাক্সেস রয়েছে!
চিনাবাদাম

7

অট্টোর উত্তর স্পট-অন। আমি এটি হার্ড উপায় আবিষ্কার করেছি।

তবে আমি http://spectacu.la/search-and-replace-for-wordpress-databases/ এ একটি দুর্দান্ত স্ক্রিপ্ট ব্যবহার করে এটি ঘিরে কাজ করতে পেরেছি

আপনার ওয়ার্ডপ্রেস এবং একটি নতুন ইউআরএল / ডোমেন নাম স্থানান্তর করতে, নিম্নলিখিতটি করুন:

  1. বিদ্যমান ওয়ার্ডপ্রেসের একটি ডিবি ডাম্প নিন (যেমন phpmyadmin ব্যবহার করে)
  2. আপনার নতুন জায়গায় ডাম্পটি যেমন রয়েছে তেমন (পুনরায় পরিবর্তনের প্রয়োজন নেই) পুনরুদ্ধার করুন
  3. আপনার ওয়ার্ডপ্রেস হোম ফোল্ডারে স্পেকট্যাকু.লা থেকে স্ক্রিপ্টটি আনজিপ করুন (এটি কোনও প্লাগইন নয় ...)
  4. আপনার ব্রাউজারটিকে এটিতে নির্দেশ করে আপনার নতুন সাইটে স্ক্রিপ্টটি চালান, যেমন : http: //new-website.url/searchreporsesb.php
  5. আপনার নতুন ওয়ার্ডপ্রেস হোম থেকে স্ক্রিপ্টটি মুছতে ভুলবেন না

1
আমি জানি এটি একপ্রকার পুরানো, তবে ডাম্পটি যেমন পুনরুদ্ধার করা হয় তবে নতুন ডাটাবেসটির নামটি কোথায় নির্দিষ্ট করা উচিত? আমি কি কমপক্ষে দ্বিতীয় ধাপে নতুন ডাটাবেস নামটি রাখা উচিত নয়? এই তথ্যের জন্য আপনাকে ধন্যবাদ
andresmijares

আমি নিশ্চিত না যে আমি আপনার প্রশ্নটি পুরোপুরি বুঝতে পেরেছি। ডাটাবেসটি পুনরুদ্ধার করা phpmyadmin এর মতো সরঞ্জামগুলির সাহায্যে করা যেতে পারে এবং আপনি এটিকে একটি নতুন নাম দিতে পারেন, বা পুরাতন নামটি ব্যবহার করতে পারেন। আমি উল্লিখিত স্ক্রিপ্টটি ইতিমধ্যে পুনরুদ্ধার করার পরে ডাটাবেসের ভিতরে কেবল পাঠ্য পরিবর্তন করে।
Yoav আনার

হাই ইয়াওভ, উত্তরের জন্য ধন্যবাদ, আমি বলতে চাইছি, আমি যখন কোনও ডিবি রফতানি করি তখন আমি সাধারণত ডাটাবেসের নামটি নতুন করে পরিবর্তন করি এবং ডোমেনের লিঙ্কগুলি পরিবর্তন করি। এটি বলেছিলেন, আপনার দ্বিতীয় ধাপে আপনি বলছেন যে ডাম্পটি W / O পরিবর্তন হিসাবে পুনরুদ্ধার করুন, আমি কেবল এটি আক্ষরিকরূপে জানতে চেয়েছিলাম, বা আমাকে ডেটাবেসের নাম কমপক্ষে পরিবর্তন করতে হবে। আমি জানি এটি একটি
জঘন্য

আপনি কীভাবে আপনার ডেটাবেস ডাম্প করেন তা আমি জানি না, তবে আপনি যদি পিএইচপিএমইডমিন 'এক্সপোর্ট' সরঞ্জামটি ব্যবহার করেন, তবে এটি কোন ডাটাবেসের নাম তা বিবেচনা করে না। আপনি রফতানিটি ব্যবহার করতে এবং এটিকে অন্য কোনও ডাটাবেসে আমদানি করতে পারেন। সাধারণত, বুলেট-পয়েন্ট 2 সম্পর্কিত, আমার মনে হয় এটি ডাটাবেসের নাম পরিবর্তন করা ঠিক।
Yoav আনার

2

ডাটাবেস রফতানির ফাইলটিতে অনুসন্ধান এবং প্রতিস্থাপন করার সময় ওপি অত্যুত্তেজাহিত হয়ে পড়েছিল এবং সিরিয়ালযুক্ত কিছু তথ্যের মধ্যে "wp_" -র পরিবর্তনের ঘটনা শেষ হয়েছিল। সমাধানটি নিয়মিত এক্সপ্রেশনের মধ্যে ব্যাকটিকটি অন্তর্ভুক্ত করে অনুসন্ধান এবং প্রতিস্থাপনে আরও পার্সোনমোনাস হতে হবে এবং তারপরে আমদানির পরে ডাটাবেসের মধ্যে অবশিষ্ট কীগুলি ম্যানুয়ালি আপডেট করে।

আপনি যদি স্থানান্তরিত করেন এবং উপসর্গটি পরিবর্তন করছেন এবং আরও ম্যানুয়াল পদ্ধতির মতো, নিম্নলিখিতগুলি করুন (এটি কেবল ওপিএস উদ্বেগকেই সম্বোধন করে এবং সাইটের ইউআরএল আপডেট করার ক্ষেত্রে ডিল করে না)

  1. নতুন পরিবেশে আপনার ডাটাবেস রফতানি এসকিউএল ফাইলটিকে ব্যাকআপ করুন এবং সরান (আমার উদাহরণটি ব্যাকআপ_ওয়াইওয়াই-এমএম-ডিডি.এসকিএল এর একটি ফাইলের নাম ধরে ধরেছে)
  2. আপনার নতুন উপসর্গটি ব্যবহার করার জন্য টেবিলের নামগুলি পরিবর্তন করতে এসকিউএল ফাইলটিতে একটি গণ অনুসন্ধান এবং প্রতিস্থাপন করুন (আপনার এসকিউএল ফাইল আমদানির জন্য পিআরআইআর!)। এটি করার একটি উপায় হ'ল পার্ল ওয়ান-লাইনার ব্যবহার করা যেমন: পার্ল -পি-আই.ব্যাক -e "এস /` ডাব্লু_পি / `মাইপ্রিফিক্স_ / জি" ব্যাকআপ_ওয়াইওয়াইওয়াই-এমএম-ডিডি.এসকিউএল
  3. আপনার এসকিউএল ডেটা ডাটাবেসে আমদানি করুন
  4. হার্ড-কোডেড উপসর্গযুক্ত _options এর মধ্যে এমন কীগুলি আপডেট করুন: আপডেট করুন Myprefix_options সেট বিকল্প_নাম = কনক্যাট ('মাইপ্রিফিক্স _', সাবস্ট্রার (বিকল্প_নাম, 4)) যেখানে বিকল্প নামটি 'wp_%' পছন্দ করে
  5. হার্ড-কোডিং উপসর্গযুক্ত _user_meta এর মধ্যে এমন কীগুলি আপডেট করুন: আপডেট করুন myprefix_usermeta সেট মেটা_কি = কনট্যাট ('মাইপ্রিফিক্স _', সাবস্ট্রট (মেটা_কি, 4)) যেখানে মেটা_কি 'wp_%' পছন্দ করে

0

আমি ডাব্লুপি মাইগ্রেট প্লাগইন ব্যবহার করেছি , ডাইনিটি HT এবং ফোল্ডার প্যাচগুলি প্রতিস্থাপন করে। আমদানি করার সময় আমি একক সমস্যা পেয়েছি, তবে উত্পন্ন স্কয়ারের শীর্ষে নীচের লাইনগুলি স্থাপন করার সমাধান করেছি:

/*!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 */;

আমি অনুসন্ধান ও প্রতিস্থাপন সরঞ্জাম (v2.1) এর মাধ্যমে @ যোভের জবাব দিয়েও চেষ্টা করেছি, তবে এটি এখনও আমার সিরিয়ালযুক্ত ডেটা ভঙ্গ করে।


হাই রিকার্ডো, ওয়ার্ডপ্রেস উত্তরগুলিতে আপনাকে স্বাগতম! আপনার পোস্ট করা অঞ্চলটি মূল প্রশ্নের উত্তরের জন্য সংরক্ষিত। আপনার প্রশ্ন সম্পর্কিত হলেও আপনার এটি পৃথক প্রশ্ন হিসাবে পোস্ট করা উচিত। আপনি এটির উত্তর দেওয়ার আরও অনেক ভাল সুযোগ পাবেন।
ক্রিস_ও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.