ডেভ / স্টেজিং এবং উত্পাদনের মধ্যে ডেটাবেস সিঙ্ক্রোনাইজেশন


36

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

বলুন আমার একটি লাইভ ওয়ার্ডপ্রেস ওয়েবসাইট আছে। আমি আমাদের দেব পরিবেশে প্রতিলিপি করে সমস্ত কিছুর ডাম্প নিয়েছি। আমি পরিবর্তন করা শুরু। 1 সপ্তাহ পরে আমি আমার আপডেটগুলি স্থাপন করতে প্রস্তুত ready এরই মধ্যে, প্রোডাকশন সাইটে ডেটাবেস পরিবর্তিত হয়েছে (নতুন পোস্ট, নতুন মন্তব্য ইত্যাদি)) রোলআউট চলাকালীন আমি উত্পাদন এবং বিকাশের মধ্যে পরিবর্তনগুলি কীভাবে সংহত করতে পারি এবং এই প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে চালানো সম্ভব (কিছুটা হলেও)?



এই প্লাগইনটি চেষ্টা করে দেখুন ওয়ার্ডপ্রেস.আর।
গোপাল ভট্টাচার্জি

উত্তর:


10

আমি মিস করছি এর চেয়ে ভাল উপায় হতে পারে তবে আমি আপনাকে 2 টি বিকল্প দিতে যাচ্ছি:

1. আপনার নতুন পোস্ট এবং মন্তব্য রফতানি করতে এক্সএমএল রফতানি ব্যবহার করুন। তারপরে ডেড ডাটাবেসে নতুন পোস্ট এবং মন্তব্যগুলি আমদানি করতে ওয়ার্ডপ্রেস আমদানিকারকটি ব্যবহার করুন

ডেভের মধ্যে আমদানি করা ভাল তখন ডাটাবেসটিকে উৎপাদনের দিকে নিয়ে যান কারণ আপনি যখন আমদানি করবেন এটি উত্পাদন থেকে সমস্ত নতুন মিডিয়া ফাইল ডাউনলোড করবে।

ইতিমধ্যে উত্পাদন পরিবর্তিত হয়েছে (নতুন পোস্ট, নতুন মন্তব্য ইত্যাদি)

এটি কোনও পরিবর্তিত সামগ্রী আনার আপনার সমস্যার সমাধান করবে।

২. dev থেকে নতুন সারণী যুক্ত করতে INSERT IGNORE INTO MySQL কমান্ডটি ব্যবহার করুন। বা একই সারণীতে সদৃশ সারিগুলিকে মুছে ফেলার জন্য REPLACE কমান্ড।

মাইএসকিউএল ব্যবহারের আগে উভয় ডাটাবেসের একটি ব্যাকআপ তৈরি করুন এবং জিজেড ডাটাবেসটিকে প্রোডাকশন সার্ভারে সরান এবং ডাম্প আপলোড করুন (দেবের নাম পরিবর্তন করুন যদি এটি উত্পাদন হিসাবে একই হয়)

INSERT IGNORE INTO `_wp_production_db`.`wp_cool_plugin_options`
SELECT *
FROM `_wp_dev_db`.`wp_cool_plugin_options`

আমি মাইএসকিএল কমান্ডের সাথে স্বাচ্ছন্দ্যবোধ করি না তাই আমি বিকল্প 1 দিয়ে যাব।


এক্সএমএল রফতানির স্টলগুলি কোথাও পোস্টের পরিমাণের সাথে লক্ষ্য করুন যেমন আমার ব্লগে +10.000 পোস্টগুলিতে আমি এটি ব্যবহার করতে পারি না।
এডেলওয়াটার

@ ইল্ডওয়াটার, হ্যাঁ এটি সর্বাধিক সরেজমিন_কালীন সময় (সাধারণত 30 সেকেন্ড) সার্ভার সেটিংসের উপর নির্ভর করে, খুব বড় রফতানির জন্য এই মানটি আরও বেশি (1-2 মিনিট বা তার বেশি) সেট করতে হবে
মাইকে 23

2

যদি এটি ঠিক একই ধরণের ডেটা (কিছু নতুন ব্লগ পোস্ট, নতুন মন্তব্য) এর চেয়ে বেশি হয় তবে আপনাকে কেন এটি সত্যই সিঙ্ক করতে হবে তা আমি নিশ্চিত নই। এটি সাইটের মতো কোডটি যেভাবে কাজ করে ঠিক একই রকম পরিবর্তিত হবে এমনটি নয়। এটি নতুন ধরণের ডেটা না হলে আমি সাধারণত এটি নিয়ে চিন্তা করি না।

আমি কেবল সর্বদা নিশ্চিত করি যে লাইভ সাইট থেকে প্রতিটি পোস্ট, পৃষ্ঠা, মন্তব্য নেই সাইটের জন্য আমার কাছে ডেটার একটি ভাল নমুনা রয়েছে।


2
ভাল যুক্তি! তবে যদি উত্পাদনের খাঁটি বিষয়বস্তুতে কিছু পরিবর্তন (পোস্ট, মন্তব্য) এবং দেবের সেটিং এবং সেটআপের পরিবর্তন থাকে (উদাহরণস্বরূপ 5 টি প্লাগইন যুক্ত এবং তাদের সেটিংস টিক করা হয়) তবে কীভাবে আপনি সত্যিই দু'বার কাজ না করে সেই সেটিংস পরিবর্তনগুলি পরিচালনা করতে পারবেন (এক সময় দেব এবং একটি উত্পাদন উপর)?
অ্যালেক্স

এটিই আসল প্রশ্ন এটি নয় এবং এর কোনও উত্তর আমার কাছে নেই।
কর্টিজমলে

-1। কখনও কখনও আমাদের এগুলি সিঙ্ক করা দরকার। বিশেষ idকরে ডাটাবেস থেকে পোস্ট / পৃষ্ঠাগুলির জন্য ।
ফ্রান্সিসকো

2

সমান্তরাল পরিবর্তনগুলি করার বিষয়টিকে স্পর্শ করার সাথে সাথে আপনি কনফিগারেশন পরিচালনার ক্ষেত্রটি স্পর্শ করেন। প্রচুর নিদর্শন সহ, নিজস্ব সম্প্রদায়গুলি (http://www.cmcrossroads.com/) এবং সরঞ্জামগুলি সংস্করণ পরিচালনার জন্য এত বেশি নয় (এসএনএন / গিট হিসাবে) তবে ক্লিয়ারকেসের মতো কনফিগারেশন পরিচালনার (নিদর্শন) সমর্থন করার জন্য। (সম্পূর্ণ ভিন্ন অঞ্চল)।

এই ক্ষেত্রে এটি এখনও একটি সহজ পরিস্থিতি এবং আপনি এটি কিছু সীমাবদ্ধতা এবং কিছু ম্যানুয়াল কাজ এবং কিছু তালিকাগুলির সাথে কাজ করতে পাবেন।

আমি যে দৃশ্যের বিষয়টি ভাবতে চাইছি এটি আদর্শ সমাধানের আরও বর্ণনামূলক করে তুলুন: একই কোডবেজ, একাধিক পরীক্ষার পরিবেশ, একাধিক স্বীকৃতি পরিবেশ, একাধিক উত্পাদন গ্রহণযোগ্যতা পরিবেশ সম্ভবত বিশ্বের সমস্ত কোণে কাজ করছে এমন একাধিক বিকাশকারী।

আপনি যদি আরও কিছুটা পেশাদার করতে চান তবে:

ক) আপনি যে সমস্ত কনফিগারেশন আইটেমগুলির মুখোমুখি হন তার একটি তালিকা লিখুন, এটি নিজেই ওয়ার্ডপ্রেস কোড হতে পারে, বহিরাগত, সামগ্রী, মেটাডেটা থেকে প্লাগইন থাকতে পারে এবং সিদ্ধান্ত নিতে পারে যে এগুলির মধ্যে কোনটি আপনি কোনও ধরণের "পরিচালনার" আওতায় আনতে চান, কোনটি গুরুত্বপূর্ণ।

খ) যে ওয়ার্কফ্লোগুলি ঘটতে পারে তার বর্ণনা দাও: যেমন কোনও স্থিরতার সাথে কী ঘটে, নতুন কিছু বিকাশের সাথে কী ঘটে, কোন ক্ষেত্রে আপনি আপনার পক্ষে সামগ্রী পরিবর্তন করেন, কী বলা হয় এবং কে এটি করে, এর মালিক কে যেমন একটি নতুন পোস্ট বা একটি নতুন প্লাগইন।

গ) সমান্তরাল কাজের জন্য প্রথমে আপনি কোন সিআই পরিচালনা করতে চান তা নির্ধারণ করুন, প্রবাহটি বিকাশ থেকে উত্পাদনে সর্বদা থাকে কিনা বা এটি দুটি উপায় করার সত্যই প্রয়োজন হয় কিনা তা স্থির করুন।

d) (ক) এর অধীনে প্রতিটি সিআই ধরণের জন্য রেজোলিউশন লিখুন। যেমন সকল পাঠ্য (বা পিএইচপি ফাইলের মতো এক্সপোর্ট করা পাঠ্য তবে এক্সএমএল ফাইলগুলিতে ALSO সাধারণ পাঠ্য) মার্জ করা সম্ভব। এটি আসলে কোনও সমস্যা নয় তবে আপনার একটি ভাল মার্জ করার সরঞ্জাম প্রয়োজন। উদাহরণস্বরূপ ক্লিয়ার কেস দিয়ে আপনি 3 পদ্ধতিতে নিম্নলিখিত পরিস্থিতিতেগুলিকে একীভূত করতে পারবেন: 1) তুচ্ছ সংশ্লেষ: এটি স্বয়ংক্রিয়ভাবে এটি করবে 2) নন তুচ্ছ স্বয়ংক্রিয়: এটি স্বয়ংক্রিয়ভাবে এটি করবে তবে আপনাকে এটি পরীক্ষা করতে হবে 3) অ তুচ্ছ নন স্বয়ংক্রিয়: এটি একটি দ্বন্দ্ব যেমন 1 লাইনে বিভিন্ন পরিবর্তন করা হয়েছে। অপ্রকাশ্যগুলি আপনাকে ম্যানুয়ালি দেখাশোনা করার জন্য ন্যূনতম অংশ, একটি ভাল মার্জিং সরঞ্জাম আপনাকে নেতৃত্ব দেবে যেমন ক্লিয়ারকেসে থাকা একটি (যা শব্দটি মার্জিংও করে এবং যেখানে আপনি নির্দিষ্ট ফাইলের জন্য অন্যান্য বাণিজ্যিক বা অ বাণিজ্যিক বাণিজ্যিক সংযোগগুলিতে লিঙ্ক করতে পারেন) ধরনের)। যদি আপনি (ক) ফাইলগুলির মধ্যে অনুলিপি করে থাকেন যা কেবল অনুলিপি করা উচিত তবে তাদের আচরণটি মার্জ করা হবে না তবে মার্জ ছাড়া অন্য সংস্করণটিকে ওভাররাইট করার এক উপায় অনুলিপি করা হবে (যেমন আপনি যে প্লাগইনগুলি সংশোধন করেননি)। এই ধরণের অনেকগুলি বিভিন্ন আচরণের মাধ্যমে সম্ভব। তবে সিআইয়ের মধ্যে সম্পর্ক লিখুন,

তারপরে নন পাঠ্য ভিত্তিক মার্জগুলির জন্য আপনাকে কীভাবে তাদের পরিচালনা করতে হবে সে সম্পর্কে সিদ্ধান্ত নেওয়া দরকার যেমন চিত্রগুলি যা 2 জায়গায় পরিবর্তিত হয়েছে। আপনি এখানে সিদ্ধান্ত নিতে পারেন যে উত্পাদনের সর্বদা পছন্দ থাকে (কমপক্ষে এটি আমি ভাবতাম) যা এটি সহজ করে তোলে।

সুতরাং ... এই সমস্যাটি সমাধান করার জন্য আপনার একটি সংস্করণ পরিচালনা সরঞ্জাম প্রয়োজন যা বিভিন্ন স্ট্রিম সমর্থন করে। প্রতিটি ধারা একটি অংশকে উপস্থাপন করে would (এটি আপনার প্রয়োজনের উপর নির্ভর করে অত্যন্ত জটিল হতে পারে তবে এই ক্ষেত্রে আমি এটি খুব সহজ বলে মনে করি)।

আপনি যদি এখন ওয়ার্ডপ্রেস ইনস্টলেশনগুলির অধীনে এই স্ট্রিমগুলি পরিচালনা করতে পারেন এবং এটি ডেটাবেস ইত্যাদির সামগ্রীর সাথেও সিঙ্ক করতে পারেন ... তবে আপনি সিএম / সংস্করণ সরঞ্জামে মার্জগুলি সম্পাদন করতে পারেন এবং এটি আবার অন্য পরিবেশে রফতানি করতে পারেন।

কথাটি হ'ল ... আপনার প্রথমে এটি লিখতে হবে। এটি কোনও প্রযুক্তিগত হ্যাক নয়। এটি কনফিগার ম্যানেজমেন্টের চারপাশে একটি ডিফল্ট প্যাটার্ন তাই এখানে অদ্ভুত কিছুই নয় তবে আপনাকে এটি লিখতে হবে। আপনি উদাহরণস্বরূপ খুঁজে পেতে পারেন যে একটি ইনস্টল প্লাগইন অন্য পরিবেশের চেয়ে আলাদা কিছু ডেটাবেস সহ ডাটাবেসে পরিবর্তন করে। সুতরাং আপনার চারপাশে একটি অতিরিক্ত পদ্ধতি থাকা দরকার।

প্রযুক্তিগতভাবে প্রায় সবসময়ই সম্ভব সম্ভব দর্শনার্থের জন্য http://www.cmcrossroads.com/forums চেক করুন যা সর্বদা একই পদ্ধতির ব্যবহার এবং একই ধরণের সিএম প্যাটার্ন ব্যবহার করে হলেও কয়েক ডজন বা কয়েকগুণ বেশি জটিল।

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


2

আমি কীভাবে প্রোডাকশন ডেটা আমাদের মঞ্চে সিঙ্ক্রোনাইজ করব সে সম্পর্কে একটি পোস্ট করেছি, এটি সম্পর্কে আমার ব্লগ পোস্টটি এখানে দেখুন: http://blog.wp.ightPoint.se/2012/01/04/synchronizing-wordpress-multisite-database -from উৎপাদন-টু-উপস্থাপনকারী-enviorment /

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

আপনি যদি মঞ্চ থেকে প্রোডের জন্য ডিফারেন্সিয়াল আপডেট করতে চান তবে আমার ধারণা মাইগ্রেশন স্ক্রিপ্টগুলি তৈরি করা সবচেয়ে নিরাপদ এবং সর্বোত্তম উপায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.