মাস্টার-মাস্টার প্রতিলিপি জন্য পুনরুদ্ধার কৌশল


8

আমি মাস্টার-মাস্টার প্রতিলিপির ভিত্তিতে মাইএসকিএলের জন্য এইচএ সমাধান বাস্তবায়ন করেছি। সামনের অংশের অংশে একটি প্রক্রিয়া রয়েছে যা গ্যারান্টি দেয় যে একটি নির্দিষ্ট সময়ে কেবলমাত্র একটি ডিবি পড়তে / লিখতে হবে (যেমন আমরা কেবল এইচএর প্রতিলিপি ব্যবহার করি)।

প্রত্যাশাটি প্রত্যাশার মতো কাজ করেছে তা আমি নিশ্চিত করেছি, তবে আমি ব্যর্থতার দৃশ্য এবং পুনরুদ্ধারের বিষয়ে ভাবছি। বিশেষত, যখন কোনও মাস্টার অপরিবর্তনযোগ্য অবস্থায় ব্যর্থ হয় এবং অন্য মাস্টারের কাছ থেকে পুনরায় তৈরি করা দরকার তখন কী হয় তা নিয়ে আমি চিন্তিত:

  • যেহেতু অন্য মাস্টারটি সরাসরি এবং সম্ভবত ব্যবহৃত হয়, তাই আমি এটিকে লক করতে এবং ডাম্পগুলি তৈরি করতে পারি না mysqldump(আমাদের ডাটাবেসগুলি মাঝারি আকারে বড় এবং mysqldumpব্যবহারের কয়েক মাস পরে খুব সহজেই কয়েক ঘন্টা সময় নিতে পারে)।
  • এমনকি ধরে নিচ্ছি যে আমার কাছে ডাম্প রয়েছে, এটি অত্যন্ত গুরুত্বপূর্ণ যে শো মাস্টার স্ট্যাটাসের দ্বারা প্রদর্শিত বাইনলোগ অবস্থানটি ডেটাবেস লক হওয়ার পরে ডাম্পের সাথে মিলে যায়।

প্রথম সমস্যার সহজ সমাধান হ'ল ব্যাকআপ হিসাবে অভিনয় করা তৃতীয় ডাটাবেস ব্যবহার করা, যা থেকে আমি এটি করতে পারি mysqldump। তবে কীভাবে আমি নিশ্চিত করব যে পুনরায় তৈরি করা মাস্টার চলমান মাস্টার থেকে ধারাবাহিক উপায়ে প্রতিলিপি শুরু করতে পারেন?


একজন মাস্টারকে দাস যুক্ত করার কথা বিবেচনা করুন যাতে আপনি সেখান থেকে আপনার ডাম্পগুলি সম্পাদন করতে পারেন। এটি ব্যাকআপগুলির জন্যও সহায়তা করবে।
জন গার্ডেনিয়ার্স

উত্তর:


2

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

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

echo 'stop slave' | mysql {options)
mysqldump {your options} > DB.sql
echo 'show slave status\G' > DB.replication
echo 'start slave' | mysql {options)

আপনার যদি কখনও এই ব্যাকআপ থেকে পুনঃস্থাপনের প্রয়োজন হয় তবে আপনি পুনরুদ্ধারটি চালাবেন এবং তারপরে পুনরায় সেটআপ করুন যেখানে দুটি পরামিতি মাস্টার_লগ_ফাইল এবং মাস্টার_লগ_পোসগুলি ডিবি.প্লিকেশন ফাইল থেকে আসে:

master_log_file = value of Master_Log_File
master_log_pos = value of Exec_Master_Log_Pos

দ্রষ্টব্য: আপনি এটি অন্য প্রতিরূপ থেকে পরীক্ষা করতে পারেন এবং করতে পারেন।

অতিরিক্ত দ্রষ্টব্য: যদি আপনার প্রতিরূপের পুল থাকে (উদাহরণস্বরূপ যদি আপনি কোনও ওয়েব অ্যাপের জন্য লেখার চেয়ে আলাদা আলাদা হয়ে থাকেন) তবে প্রতিলিপিগুলি নতুন মাস্টারের সাথে সিঙ্কের বাইরে থাকতে পারে; এটি হতে পারে যদি ভারী লেখার সময় I / O এর সময়কালে ব্যর্থতা দেখা দেয় যেহেতু প্রতিলিপিগুলি অবিচ্ছিন্নভাবে প্রবাহিত হয় এবং আপনি ব্যর্থ হওয়ার পরে আপনার স্ট্যান্ডবাই অন্যান্য প্রতিরূপগুলির মতো একই অবস্থানে রয়েছে এমন কোনও গ্যারান্টি নেই। যাইহোক, আমার সাথে এটি এখনও ঘটেনি ...


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