MySQL क्वेरी लॉग को कैसे सक्षम करें?


252

मैं क्लाइंट्स से प्राप्त प्रत्येक SQL क्वेरी स्टेटमेंट को लॉग करने वाले MySQL फ़ंक्शन और क्वेरी स्टेटमेंट को सबमिट करने के समय को कैसे सक्षम करूं? क्या मैं phpmyadmin या NaviCat में ऐसा कर सकता हूं? मैं लॉग का विश्लेषण कैसे करूं?

जवाबों:


301

सबसे पहले, याद रखें कि यह लॉगफ़ाइल एक व्यस्त सर्वर पर बहुत बड़ा हो सकता है।

Mysql <5.1.29 के लिए:

क्वेरी लॉग को सक्षम करने के में रखते /etc/my.cnfमें [mysqld]अनुभाग

log   = /path/to/query.log  #works for mysql < 5.1.29

इसके अलावा, इसे MySQL कंसोल से सक्षम करने के लिए

SET general_log = 1;

Http://dev.mysql.com/doc/refman/5.1/en/query-log.html देखें

Mysql 5.1.29+ के लिए

Mysql 5.1.29+ के साथ, logविकल्प को हटा दिया गया है। लॉगफ़ाइल निर्दिष्ट करने और लॉगिंग को सक्षम करने के लिए, my.cnf [mysqld]अनुभाग में इसका उपयोग करें :

general_log_file = /path/to/query.log
general_log      = 1

वैकल्पिक रूप से, MySQL कंसोल से लॉगिंग चालू करने के लिए (किसी तरह लॉग फ़ाइल स्थान को भी निर्दिष्ट करना होगा, या डिफ़ॉल्ट स्थान खोजना होगा):

SET global general_log = 1;

यह भी ध्यान दें कि केवल धीमी क्वेरी लॉग करने के लिए अतिरिक्त विकल्प हैं, या वे जो इंडेक्स का उपयोग नहीं करते हैं।


1
यह MySQL 5.6.19 में काम नहीं कर रहा है। क्या उन्होंने इसे फिर से बदल दिया?
एलेक्स आर।

5
general_log = general_log_file = / path / to / query.log ने मेरे लिए काम किया
किरेन शिव

27
इसने मेरे लिए काम किया (MySQL 5.6.12 on Windows):SET global general_log_file='c:/Temp/mysql.log'; SET global general_log = on; SET global log_output = 'file';
youen

सुनिश्चित करें कि लॉग फ़ाइल के लिए mysql उपयोगकर्ता पहुँच अनुमतियाँ, या यह MySQL कंसोल में General_log पैरामीटर सेट करते समय 'पाया नहीं गया' त्रुटि लौटेगा
को R.

5.6.22 के लिए @ आपको यह बिल्कुल सही लगा। धन्यवाद! केवल यह सुनिश्चित करने के लिए कि निर्देशिका और फ़ाइल को अस्तित्व में लिखा जा रहा है और mysql द्वारा लिखने योग्य है।
नाइटऑवलप्रोग्राम

189

एक अन्य संबंधित प्रश्न के उत्तर पर एक नज़र डालें। यह दिखाता है कि पुनः आरंभ किए बिना लाइव सर्वर पर लॉग को सक्षम, अक्षम और कैसे देखें।

Mysql में सभी प्रश्नों को लॉग इन करें


यहाँ एक सारांश है:

यदि आप नहीं चाहते हैं या MySQL सर्वर को पुनरारंभ नहीं कर सकता है तो आप अपने रनिंग सर्वर पर इस तरह आगे बढ़ सकते हैं:

  • अपनी लॉग टेबल बनाएं ( उत्तर देखें )

  • डेटाबेस पर क्वेरी लॉगिंग सक्षम करें (ध्यान दें कि स्ट्रिंग 'तालिका' को शाब्दिक रूप से रखा जाना चाहिए और किसी तालिका नाम से प्रतिस्थापित नहीं किया जाना चाहिए। धन्यवाद निकोलस पिकरिंग )

SET global general_log = 1;
SET global log_output = 'table';
  • लॉग देखें
select * from mysql.general_log;
  • डेटाबेस पर क्वेरी लॉगिंग अक्षम करें
SET global general_log = 0;

18
यह ध्यान दिया जाना चाहिए कि 'तालिका' का शाब्दिक अर्थ है दर्ज किया जाना, और आपके डेटाबेस में तालिका के नाम के साथ प्रतिस्थापित नहीं किया जाना चाहिए।
निकोलस पिकरिंग

1
मैक ओएस एक्स पर, MySQL सॉफ्टवेयर इंस्टॉलर ने CSV प्रकार के साथ, स्वचालित रूप से general_log तालिका बनाई है। इसका मतलब यह है कि मैं इसी CSV फ़ाइल को भी टेल कर सकता हूं: sudo tail -f -n 250 /usr/local/mysql/data/mysql/general_log.CSV
Jay Sheth

वैश्विक लॉगिंग के बाद log_output = 'table'; धीमी गति से क्वेरी किसी फ़ाइल में लिखी जाएगी? मुझे लगता है कि SET के बाद वैश्विक general_log = 0; आपको पिछले 'log_output' मान को सेट करना चाहिए, यह संभावित रूप से 'FILE' है
user2602807 7

59

मैं लॉगिंग के लिए इस विधि का उपयोग करता हूं जब मैं विभिन्न पृष्ठ भारों को जल्दी से अनुकूलित करना चाहता हूं। यह एक छोटी सी टिप है ...

तालिका में प्रवेश करना

SET global general_log = 1;
SET global log_output = 'table';

आप तब मेरे से चयन कर सकते हैं mysql.general_log हाल की क्वेरी को पुनः प्राप्त करने के लिए तालिका ।

मैं तब tail -fmysql.log पर कुछ समान कर सकता हूं, लेकिन अधिक परिशोधन के साथ ...

select * from mysql.general_log 
where  event_time  > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> "" 
and argument <> "SET NAMES 'UTF8'"  and argument <> "SHOW STATUS"  
and command_type = "Query"  and argument <> "SET PROFILING=1"

इससे मेरे प्रश्नों को देखने में आसानी होती है कि मैं कोशिश कर सकता हूं और वापस काट सकता हूं। मैं पिछले 8 सेकंड के भीतर निष्पादित प्रश्नों को लाने के लिए 8 सेकंड के अंतराल का उपयोग करता हूं।


57

यह पहले से ही एक टिप्पणी में था, लेकिन इसके खुद के जवाब के हकदार हैं: बिना विन्यास फाइल को संपादित किए: mysql में, रूट के रूप में,

SET global general_log_file='/tmp/mysql.log'; 
SET global log_output = 'file';
SET global general_log = on;

बाद में इसे बंद करना न भूलें:

SET global general_log = off;

1
मैंने पाया है कि लिनक्स सिस्टमड के तहत, यदि आप किसी फाइल को लॉग इन करने की कोशिश करते हैं, तो /tmp/यह कहीं खत्म हो सकती है जैसे/tmp/systemd-private-...-mariadb.service-.../tmp/
mwfearnley

14

आप सामान्य क्वेरी लॉग को निष्क्रिय कर सकते हैं या सक्षम कर सकते हैं (जो सभी प्रश्नों को लॉग करता है)

SET GLOBAL general_log = 1 # (or 0 to disable)

मेरे मामले में, साझा होस्टिंग सर्वर पर सामान्य क्वेरी लॉग को सक्षम नहीं किया जा सकता है। मेरे पास केवल धीमी क्वेरी लॉग सक्षम हो सकती है, और सिस्टम व्यवस्थापक अनुरोध पर मेरे खाते से संबंधित प्रविष्टियां प्रदान कर सकते हैं।
फेंग-चुन टिंग

9

मैं प्रश्नों को देखने के लिए MySQL लॉग फ़ाइल को सक्षम करना चाहता था और मैंने नीचे दिए गए निर्देशों के साथ इसे हल किया है

  1. के लिए जाओ /etc/mysql/mysql.conf.d
  2. mysqld.cnf खोलें

और नीचे की पंक्तियों को सक्षम करें

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
  1. इस आदेश के साथ MySQL पुनः आरंभ करें /etc/init.d/mysql restart
  2. /var/log/mysql/लॉग पर जाएं और जांचें

हर बार जब MySQL शुरू किया जाता है, तो उन सेटिंग्स को गोपनीय फ़ाइल में सहेजना ठीक है, लेकिन आपको इस कॉन्फ़िगरेशन को लागू करने के लिए MySQL को पुनरारंभ करने की आवश्यकता नहीं है। आप इसे 'SET ग्लोबल' का उपयोग करके सेट कर सकते हैं जैसे अन्य ने कहा।
एंजल


3

विंडोज पर आप आसानी से जा सकते हैं

C:\wamp\bin\mysql\mysql5.1.53\my.ini

इस लाइन को my.ini में डालें

general_log_file = c:/wamp/logs/mysql_query_log.log

My.ini फ़ाइल अंत में इस तरह दिखता है

...
...
...    
socket      = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log        #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...

3

MySQL 5.6 संस्करण में बग है। यहां तक ​​कि mysqld शो के रूप में:

    Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf 

वास्तव में सेटिंग्स निम्नलिखित क्रम में पढ़ रहे हैं:

    Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf

फ़ाइल चेक करें: "C: \ ProgramData \ MySQL \ MySQL सर्वर 5.6 \ my.ini"

आशा है कि यह किसी की मदद करेगा।


क्या इस बग के लिए कहीं बग रिपोर्ट है?
mwfearnley

1

mysql के लिए = = 5.5 केवल धीमी क्वेरी (1 सेकंड और अधिक) my.cfg के लिए

[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes

1
यह गलत है - जो धीमी क्वेरी लॉग को सक्षम करता है, क्वेरी लॉग को नहीं।
सैम ड्यूफेल

मुझे लगता है कि आपको डैश का उपयोग करना होगा।
AFA मेड

1

मैक मशीन में क्वेरी लॉग को सक्षम करने के लिए:

निम्न फ़ाइल खोलें:

vi /private/etc/my.cnf

'Mysqld' सेक्शन के अंतर्गत क्वेरी लॉग url को निम्नानुसार सेट करें:

[mysqld]

general_log_file=/Users/kumanan/Documents/mysql_query.log

कुछ मशीन ठीक से क्वेरी लॉग नहीं कर रहे हैं, ताकि आप MySQL कंसोल से इसे सक्षम कर सकें

mysql> SET global general_log = 1;

1

सवाल का जवाब बिल्कुल नहीं क्योंकि सवाल के पहले से ही शानदार जवाब हैं। यह एक पक्ष की जानकारी है। सामान्य रूप से सक्षम करना वास्तव में MySQL के प्रदर्शन पर सेंध लगाता है। मैंने general_log =1गलती से एक प्रोडक्शन सर्वर पर छोड़ दिया और यह पता लगाने में घंटों बिता दिए कि प्रदर्शन अन्य सर्वरों पर समान सेटअप के बराबर क्यों नहीं था। तब मुझे यह मिला जो सामान्य लॉग को सक्षम करने के प्रभाव को बताता है। http://www.fromdual.com/general_query_log_vs_mysql_performance

कहानी का सार, फाइल general_log=1में न डालें .cnf। इसके बजाय set global general_log =1एक संक्षिप्त अवधि के लिए उपयोग करें कि आप क्या पता लगाने की कोशिश कर रहे हैं और फिर इसे बंद करने के लिए पर्याप्त लॉग इन करें।


0

PhpMyAdmin 4.0 में, आप स्थिति> मॉनिटर पर जाते हैं। इसमें आप धीमी क्वेरी लॉग और सामान्य लॉग को सक्षम कर सकते हैं, लाइव मॉनिटर देख सकते हैं, ग्राफ़ के एक हिस्से का चयन कर सकते हैं, संबंधित क्वेरी देख सकते हैं और उनका विश्लेषण कर सकते हैं।


0

मुझे एक बिंदु पर सामान्य लॉग को छोड़ना और फिर से बनाना था। मनोरंजन के दौरान, वर्ण सेट गड़बड़ हो गए और मैंने लॉग में इस त्रुटि को समाप्त किया:

[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'

इसलिए यदि "सुनिश्चित करने के लिए जाँच करें कि लॉगिंग चालू है" का मानक उत्तर आपके लिए काम नहीं करता है, तो यह सुनिश्चित करने के लिए जाँच करें कि आपके फ़ील्ड में सही वर्ण सेट है या नहीं।

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