আপনি যদি বাইনারি লগগুলি সক্ষম করে চালাচ্ছেন তবে এটি তুলনামূলকভাবে উচ্চ নির্ভরযোগ্যতার সাথে পরীক্ষা করা যেতে পারে।
প্রথমে, বাইনারি লগগুলি সত্যই সক্ষম কিনা তা দেখতে, চালান:
SHOW BINARY LOGS;
যদি তারা সক্ষম হয়, আপনার এইরকম একটি আউটপুট পাওয়া উচিত:
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000244 | 15462544 |
| mysql-bin.000245 | 102622775 |
+------------------+-----------+
অন্যথায় আপনি একটি ত্রুটি বার্তা পাবেন।
এখন, যদি বাইনারি লগ সক্ষম হয়, তবে যে কোনও সফল প্রতিশ্রুতি বাইনারি লগগুলিতেও লেখা হয়। আমি "প্রতিশ্রুতিবদ্ধ" বলি, তবে সত্যটি কোনও সফল অপারেশন, এমনকি মাইআইএসএএম-র মতো লেনদেনের টেবিলগুলিতেও সেখানে লেখা আছে is তবে, সত্যি বলতে কী, আপনার প্রশ্নের ফলাফল সম্পর্কে কোনও নিশ্চিততা থাকার জন্য, আমি আপনার পক্ষে আশাবাদী যে আপনি একটি ট্রানজেকশনাল ইঞ্জিন যেমন ইনোডিবি ব্যবহার করছেন, না হলে আপনি কোনও কিছুর বিষয়ে নিশ্চিত হতে পারবেন না।
ঠিক আছে, এখনই ধরে নিচ্ছেন যে আপনি বাইনারি লগগুলি চালু করেছেন এবং আপনার টেবিলগুলি লেনদেনের (আশাকরি InnoDB) রয়েছে, তবে আপনার প্রশ্নের সফল সাফল্য বাইনারি লগগুলিতে লেখা হবে বলে আশা করা হচ্ছে।
আপনাকে এখন প্রাসঙ্গিক বাইনারি লগটি অনুসন্ধান করতে হবে এবং সেখানে ক্যোয়ারীটি সন্ধান করতে হবে। যদি আপনি কোয়েরিটি খুঁজে পান - ভাল! যদি না - এটি সম্ভবত সেখানে নেই। আমি শীঘ্রই ব্যাখ্যা করব।
কোন বাইনারি লগে আপনার ক্যোয়ারী রয়েছে? সাধারণত আপনার ডেটা ডিরেক্টরিতে বাইনারি লগ ফাইলগুলি নিজেরাই দেখুন। তাদের টাইমস্ট্যাম্পগুলি সন্ধান করুন। শক্তি যখন আসে, একটি নতুন বাইনারি লগ তৈরি হয়েছিল। খুজেন. আপনার প্রশ্নগুলি সম্ভবত তার আগে বাইনারি লগের মধ্যে রয়েছে । এটি একটি অনুমান। এটি এর আগেও এক হতে পারে ইত্যাদি But তবে এটি একটি ভাল অনুমান।
mysqlbinlogকমান্ড লাইন থেকে এখন ইউটিলিটি ব্যবহার করে , এক্সিকিউট করুন, এরকম কিছু:
mysqlbinlog mysql-bin.000245
আপনার ক্যোয়ারী থাকতে পারে এমন সন্দেহের সাথে ফাইলের নামটি প্রতিস্থাপন করুন।
এটি এই বাইনারি লগ ফাইলের সমস্ত প্রশ্নের মান আউটপুটে আউটপুট দেবে। ইউনিক্সে, grepআপনার ক্যোয়ারীটি সন্ধান করতে ব্যবহার করুন :
mysqlbinlog mysql-bin.000245 | grep "something which identifies the query"
উইন্ডোজ, শুভকামনা। নোটপ্যাড ++ বা কিছু দিয়ে খুলুন এবং ম্যানুয়ালি অনুসন্ধান করুন।
প্রশ্নটি কি সেখানে? দুর্দান্ত - আপনি জানেন যে এটি প্রতিশ্রুতিবদ্ধ হয়েছে।
কোয়েরি কি নেই? পরম চেক করা দরকার sync_binlog। এটা কি 1 ? তারপরে বাইনারি লগে কোয়েরি নেই ==> কোয়েরি প্রতিশ্রুতিবদ্ধ নয়। তবে যদি sync_binlogএটি 1 না হয় তবে এখনও বাইনারি লগ না করে কোয়েরিটি প্রতিশ্রুতিবদ্ধ হওয়ার সম্ভাবনা থাকতে পারে, কারণ commitবাইনারি লগটি ডিস্কে ফেলে দেওয়ার ঠিক আগে এবং ক্র্যাশটি ঘটেছিল । এরপরে আপনাকে অন্য উপায়ে ফিরে যেতে হবে।
যারা হচ্ছেন: (এবং আশা করি, আপনি আবার ইনোডিবি ব্যবহার করছেন): এমন একক সারি সন্ধান করুন যা কোয়েরির ফলাফল সনাক্ত করতে পারে। InnoDB এর সাহায্যে আপনি "সমস্ত বা কিছুই" পাবেন না। আপনি যদি কোয়েরিতে প্রভাবিত একটি একক সারি সম্পর্কে নিশ্চিত হতে পারেন - আপনি নিশ্চিত হতে পারেন যে ক্যোয়ারীটি সম্পন্ন হয়েছে।
সম্পাদনা করুন: অবশ্যই, ধীর লগ সক্ষম থাকলে, আপনি দীর্ঘায়িত ক্যোয়ারীটি সম্পূর্ণ হওয়ার পরে সেখানে লগ হওয়ার আশা করতে পারেন ...
শুভকামনা!