মাইএসকিউএল লগিং ডাটাবেসের জন্য পুচ্ছ -f সমান


12

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

উত্তর:


5

মাইএসকিউএল বাইনারি লগিং চালু করুন। তারপরে আপনি mysqlbinlogসমস্ত ডেটা-সংশোধনকারী বিবৃতি দেখতে কমান্ডটি ব্যবহার করতে পারেন ।


আপনার পছন্দের ভাষাতে বা ব্যাশ দিয়ে কীভাবে এটি করা যায় তার একটি উদাহরণ আপনি প্রদর্শন করতে পারেন?
আলেকজান্ডার মিলস

7

আমি মনে করি না কিছু লোক প্রশ্নটি বুঝতে পারে (বা আমি তা করি না)। আপনি ডিবি-র বিরুদ্ধে প্রশ্নগুলি লগ করতে চান না; বরং কোনও অ্যাপ্লিকেশন থেকে একটি লগ একটি ডিবিতে যাচ্ছে। যদি এটি ফাইল হয় তবে আপনি লগটি লেজ করতে পারতেন। আপনি কীভাবে কোনও টেবিলটি লেজ করবেন যাতে কোনও নতুন সারি যুক্ত হলে এটি আউটপুট হয়?

এটি হ্যান্ডেল করার জন্য একটি সাধারণ লুপ লেখা শক্ত হওয়া উচিত নয়, ধরে নেওয়া আপনার একটি অনন্য ক্ষেত্র রয়েছে যা সময়ের সাথে একঘেয়েমি বৃদ্ধি পায় (যেমন, একটি ক্রম সংখ্যা)।

current_pos = select max(seq) from table
while true
  new_pos = select max(seq) from table
  if new_pos > current_pos
    select * from table where seq > current_pos
    current_pos = new_pos
  endif
  sleep 1
endwhile

এটিকে পোলিং বলা হয় এবং এটি খুব মজাদার নয় :) তবে আমি মনে করি একটি ভাল কৌশল, যদি আপনার অবশ্যই ভোটদান অবশ্যই ব্যবহার করা হয়।
আলেকজান্ডার মিলস

3

দেখা যাচ্ছে যে আমরা অনেকেই আপনার প্রশ্নটি বেশ বুঝতে পারি না। "লগিং ডাটাবেস" বলতে আপনার কী বোঝায় , এটি কোনও মানক মাইএসকিউএল শব্দ নয়।

মাইএসকিউএল জেনারেল ক্যয়েরি লগ ব্যবহার করুন , যা ক্লায়েন্টের কাছ থেকে প্রাপ্ত প্রতিটি বিবৃতিতে লগ করে।

তারপরে আপনি আপনার my.cnf এ লগ_আউটপুট = টেবিল সেট করতে পারেন । ফাইলটি $ mysql_data_directory / জেনারেল_লগ.সিএসভিতে লেখা হবে। আপনি tail -fএই ফাইলটি রিয়েল টাইমে প্রশ্নগুলি দেখতে পারেন to


2

আমি যা ব্যবহার করি তা এখানে। সবচেয়ে সহজ সমাধান মনে হচ্ছে, যদিও এটি খুব দক্ষ নয়:

watch "mysql db_name -e '(SELECT * FROM my_table ORDER BY id DESC LIMIT 10) ORDER BY id ASC;'"


1

আপনি এটি একটি হ্যাকি উপায়ে ডাটাবেস ফাইলে (/var/lib/mysql/datedia_name/table_name.MY*) টেল -ফ ব্যবহার করে এবং তারপরে প্রতিবার একটি লাইন পড়ার পরে আপনার ক্যোয়ারী চালিয়ে যেতে পারেন।


1

আপনি যে টেবিলটি টেল করতে চান তাতে একটি টাইমস্ট্যাম্প ক্ষেত্র যুক্ত করার পরামর্শ দিচ্ছি। এটি আপনাকে একটি সাধারণ ক্যোয়ারির সাহায্যে খুব সহজেই পছন্দসই ফলাফলগুলি পেতে দেয়।


1

আপনি যেতে যেতে পছন্দ করতে পারেন:

http://www.jetprofiler.com/blog/10/tail--f-table-with-myterm/#comments

এটি পুরানো এবং 3 বছর ধরে ছোঁয়া হয়নি - তবে আমি এটি চেষ্টা করেছিলাম এবং এটি ঠিক আছে। BZR রেপো ক্লোন করুন এবং README পড়ুন।

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