মাইআইএসএএম-এর সাথে মিশ্রিত হয়ে আইএনএসডিবি টেবিলগুলি কি মাইএসকিএলডামের সময় লক হয়ে যায়?


9

আমি আমার মাইএসকিএল সার্ভারগুলির জন্য একটি ব্যাকআপ সমাধান সন্ধান করছি এবং আমার যতটা সম্ভব কম ডাউনটাইম দরকার। আমার নিম্নলিখিতগুলি রয়েছে:

  • মাইএসকিউএল সার্ভারগুলি
  • তারা প্রতিলিপি করা হয় না
  • প্রতিটি সার্ভার তার নিজস্ব জন্য দাঁড়িয়ে

এই সংখ্যাটি বাড়তে পারে, সুতরাং একটি মাস্টার / ক্রীতদাস প্রতিলিপি সেট আপ করা ভাল ধারণা হবে না।

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

প্রশ্নটি হ'ল: যদি আমি সার্ভারে থাকা সমস্ত ডাটাবেসে একটি মাইএসকিल्डম্প করি, এটি কি আমার ইনোডব টেবিলগুলিকে লক করবে?

উত্তর:


7

ইনোডিবি এবং মাইআইএসএএম সহ মাইএসকিএলডাম্পগুলি পারস্পরিক একচেটিয়া হিসাবে বিবেচনা করা হয়। এখানে কেন:

আপনি যদি মাইএসকিএলডামের প্রক্রিয়া চলাকালীন আপনি মাইএসকিএল-এ লগইন করতে পারেন তবে আপনি এরকম কিছু দেখতে পাবেন:

SELECT /* SQL_NO_CACHE */ * FROM tblname

ডিফল্টরূপে, মাইএসকিলডাম্প নিম্নলিখিতগুলি করবেন:

  • প্রতিটি ডাটাবেস বর্ণানুক্রমিক ক্রমে ফেলে দেওয়া হয়
  • প্রতি ডাটাবেস ডাম্প করা প্রতিটি টেবিল বর্ণানুক্রমিক ক্রমে ফেলে দেওয়া হয় (স্টোরেজ ইঞ্জিন নির্বিশেষে)

এটি কোনও মাইএসকিউএল ইনস্ট্যান্সের জন্য ঠিক করা উচিত যাতে অন্য কোনও ডাটাবেস ক্রিয়াকলাপ নেই। InnoDB টেবিল এবং মাইআইএসএএম টেবিলগুলি একে অপরকে প্রভাবিত করে না।

--single-transactionঅল-ইনোডিবি মাইএসকিউএল ইনস্ট্যান্সের বিরুদ্ধে ব্যবহার করা একটি চেকপয়েন্ট তৈরি করে এবং একই পয়েন্ট-ইন-টাইম থেকে সমস্ত টেবিল ডাম্প করে। একবার মাইআইএসএএম টেবিলের মুখোমুখি হয়ে গেলে, সমস্ত বেট বন্ধ হয়ে যায়। এটি মাইআইএসএএম এর পরে সমস্ত ইনোডিবি টেবিলকে ভিন্ন পয়েন্ট-ইন-টাইম থেকে ফেলে দেওয়ার কারণ হতে পারে।

ইনোডিবি এবং মাইআইএসএএম এর মিশ্রণের জন্য ধারাবাহিক পয়েন্ট-ইন-টাইম ডাম্পের জন্য আপনার কাছে বিকল্প রয়েছে

বিকল্প 1

মাইএসকিএল পুনরায় আরম্ভ করুন যাতে অন্য কেউ টিসিপি / আইপি এবং তারপরে মাইএসকিএলডম্পের মাধ্যমে লগইন করতে না পারে

service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart 

বিকল্প # 2

যদি সমস্ত মাইআইএসএএম টেবিলগুলি কেবল পঠনের জন্য হয় তবে স্রেফ মাইএসক্ল্ড্প্প -সেনসেল-লেনদেন ব্যবহার করে

বিকল্প # 3

যদি কোনও মাইআইএসএএম টেবিল লেখা থাকে তবে - একসেল-লেনদেন যথেষ্ট নয়

আপনি নিম্নলিখিত করতে হবে:

mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql

মাইএসকিএলডাম সম্পন্ন হওয়ার সাথে সাথেই, মাইএসকিএল-এ লগইন করুন এবং করুন show processlist;। ক্যোয়ারীর সন্ধান করুন SELECT SLEEP(86400), প্রক্রিয়া আইডি সন্ধান করুন এবং চালানKILL <procidnumn>;


5

mysqldump --single-transactionটেবিলগুলি লক করে না তবে মাইআইএসএএম টেবিলগুলির এই বিকল্পের সাথে নিয়মিত ডাম্প থাকার গ্যারান্টি নেই। এটি ব্যবহার করা ভাল mydumper, mydumperমাইআইএসএএম টেবিলগুলি লক করে এবং ইনোডিবি লক করে না তাই ডাম্প সামঞ্জস্যপূর্ণ।


বাহ, এই দুর্দান্ত সরঞ্জামের জন্য ধন্যবাদ! আপনি কি এমন কোনও সরঞ্জামের সাথে পরিচিত যা মাইডাম্পার দিয়ে প্রতিদিন, সাপ্তাহিক, মাসিক ব্যাকআপ স্বয়ংক্রিয় করতে পারে? "অটোমিস্ক্লব্যাকআপ" এর মতো কিছু, কেবল মাইডাম্পার দিয়ে? ধন্যবাদ।
টুন্নানো

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