MySQL लॉगिंग डेटाबेस के लिए टेल -फ समकक्ष


12

यह तय किया गया था कि हमें अपने एप्लिकेशन लॉग के लिए एक (MySQL) डेटाबेस का उपयोग करना चाहिए (यह लॉगबैक लिब का उपयोग करके जावा ऐप है)। मैं ऐसा कुछ खोजने की उम्मीद कर रहा हूं tail -fजो मैं उस डेटाबेस में एक विशिष्ट तालिका के साथ उपयोग कर सकता हूं जो मुझे नई पंक्तियों को दिखाएगा क्योंकि उन्हें जोड़ा जाता है ( tail -fलॉग फ़ाइलों पर काम करने के तरीके के समान )।

जवाबों:


5

MySQL बाइनरी लॉगिंग चालू करें। फिर आप mysqlbinlogसभी डेटा-संशोधित बयानों को देखने के लिए कमांड का उपयोग कर सकते हैं ।


क्या आप अपनी पसंद की भाषा में या बैश के साथ ऐसा करने का एक उदाहरण दिखा सकते हैं?
अलेक्जेंडर मिल्स

7

मुझे नहीं लगता कि कुछ लोग प्रश्न को समझते हैं (या मैं नहीं)। आप डीबी के खिलाफ प्रश्नों को लॉग इन नहीं करना चाहते हैं; बल्कि एक आवेदन से एक लॉग एक DB में जा रहा है। यदि यह एक फ़ाइल थी तो आप लॉग को पूँछ सकते थे। आप एक तालिका कैसे बनाते हैं ताकि जब एक नई पंक्ति जोड़ी जाए तो यह आउटपुट हो?

इसे संभालने के लिए एक सरल लूप लिखना मुश्किल नहीं होना चाहिए, यह मानते हुए कि आपके पास एक अनूठा क्षेत्र है जो समय के साथ एकरूपता बढ़ाता है (उदाहरण के लिए, क्रम संख्या)।

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

ऐसा प्रतीत होता है कि हम में से बहुत से लोग आपके प्रश्न को नहीं समझते हैं। "लॉगिंग डेटाबेस" से आपका क्या तात्पर्य है , जो एक मानक MySQL शब्द नहीं है।

MySQL जनरल क्वेरी लॉग का उपयोग करें , जो क्लाइंट से प्राप्त प्रत्येक स्टेटमेंट को लॉग करता है।

फिर आप अपने my.cnf में log_output = TABLE सेट कर सकते हैं । फ़ाइल को $ mysql_data_directory / general_log.CSV को लिखा जाएगा। tail -fवास्तविक समय में प्रश्नों को देखने के लिए आप इस फाइल को देख सकते हैं।


2

यहाँ मैं क्या उपयोग है। सबसे सरल समाधान लगता है, हालांकि यह बहुत कुशल नहीं है:

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


1

आप डेटाबेस फ़ाइल (/var/lib/mysql/database_name/table_name.MY*) पर टेल-ऑफ़ का उपयोग करके इसे हैक कर सकते हैं और फिर हर बार एक पंक्ति पढ़ने पर अपनी क्वेरी चला रहे हैं।


1

मैं सुझाव देता हूं कि आप जिस भी टेबल पर जाना चाहते हैं, उसमें टाइमस्टैम्प फील्ड को जोड़ दें। यह आपको सरल क्वेरी के साथ वांछित परिणाम आसानी से प्राप्त करने की अनुमति देगा।


1

आप इसे देना पसंद कर सकते हैं:

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

यह पुराना है और इसे 3 साल से छुआ नहीं गया है - लेकिन मैंने अभी इसे आज़माया है और यह ठीक है। BZR रेपो पर क्लोन करें और README को पढ़ें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.