শক্তি চলে গেল - কোয়েরি শেষ হয়েছে?


9

কোনও জিজ্ঞাসা শেষ হয়েছে কিনা তা পরীক্ষা করে দেখার কোনও উপায় আছে? আমি গত সপ্তাহে অবকাশের জন্য দরজার বাইরে যেতে যেতে 3 টি খুব দীর্ঘ চলমান আপডেট ক্যোয়ারী (+/- 25 ঘন্টা প্রতিটি) দৌড়েছি। দুর্ভাগ্যক্রমে, সপ্তাহে কোথাও বিদ্যুৎ চলে যায় এবং এমওয়াইএসকিউএল চালিত মেশিনটি বন্ধ হয়ে যায়। 3 (বা তিনটি) কোয়ের কোনটি সম্পন্ন হয়েছে তা যাচাই করে দেখার কোনও উপায় আছে?

আমি জানি যে আমি ডেটা আপডেট হয়েছিল কিনা তা পরীক্ষা করে দেখতে পারতাম, তবে NUL গুলি সঠিক এবং সম্পূর্ণ প্রয়োগের সাথে প্রত্যাশা করা উচিত এবং সেখানে 48 মিলিয়ন সারি ডেটা ব্যবহার করা যায়। কোন চিন্তা?

mysql 

6
লগগুলি ... আপনি জিনিস লগ যদি। আপনি না হলে আমি শুরু করার পরামর্শ দিই।
বেন

1
@ বেন - কোনও ইউপিএস এবং লেনদেনের প্রক্রিয়াজাতকরণের প্রস্তাব দিতে খুব দেরী হয়েছে বলে আমার ধারণা।

1
আপনি যদি InnoDB ব্যবহার করে থাকেন তবে লেনদেনে আপনি আপনার কোডটি করতে পারেন। dev.mysql.com/doc/refman/5.0/en/commit.html

1
আপনার যদি ধীরে কোয়েরি লগিং চালু থাকে তবে স্লো ক্যোয়ারী লগটিতে ধীরে ধীরে অনুসন্ধানগুলি শেষ হয়ে যেত।

3
এবং, যদি এটি সঠিকভাবে সম্পন্ন না হয়, আপনার কি ব্যাকআপ আছে?

উত্তর:


9

আপনি যদি বাইনারি লগগুলি সক্ষম করে চালাচ্ছেন তবে এটি তুলনামূলকভাবে উচ্চ নির্ভরযোগ্যতার সাথে পরীক্ষা করা যেতে পারে।

প্রথমে, বাইনারি লগগুলি সত্যই সক্ষম কিনা তা দেখতে, চালান:

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 এর সাহায্যে আপনি "সমস্ত বা কিছুই" পাবেন না। আপনি যদি কোয়েরিতে প্রভাবিত একটি একক সারি সম্পর্কে নিশ্চিত হতে পারেন - আপনি নিশ্চিত হতে পারেন যে ক্যোয়ারীটি সম্পন্ন হয়েছে।

সম্পাদনা করুন: অবশ্যই, ধীর লগ সক্ষম থাকলে, আপনি দীর্ঘায়িত ক্যোয়ারীটি সম্পূর্ণ হওয়ার পরে সেখানে লগ হওয়ার আশা করতে পারেন ...

শুভকামনা!


2
আমি আশা করি আপনি আটকে থাকবেন
jcolebrand

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