ইনোডিবি এবং মাইআইএসএএম সহ মাইএসকিএলডাম্পগুলি পারস্পরিক একচেটিয়া হিসাবে বিবেচনা করা হয়। এখানে কেন:
আপনি যদি মাইএসকিএলডামের প্রক্রিয়া চলাকালীন আপনি মাইএসকিএল-এ লগইন করতে পারেন তবে আপনি এরকম কিছু দেখতে পাবেন:
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>;