मैं क्लाइंट्स से प्राप्त प्रत्येक SQL क्वेरी स्टेटमेंट को लॉग करने वाले MySQL फ़ंक्शन और क्वेरी स्टेटमेंट को सबमिट करने के समय को कैसे सक्षम करूं? क्या मैं phpmyadmin या NaviCat में ऐसा कर सकता हूं? मैं लॉग का विश्लेषण कैसे करूं?
मैं क्लाइंट्स से प्राप्त प्रत्येक SQL क्वेरी स्टेटमेंट को लॉग करने वाले MySQL फ़ंक्शन और क्वेरी स्टेटमेंट को सबमिट करने के समय को कैसे सक्षम करूं? क्या मैं phpmyadmin या NaviCat में ऐसा कर सकता हूं? मैं लॉग का विश्लेषण कैसे करूं?
जवाबों:
सबसे पहले, याद रखें कि यह लॉगफ़ाइल एक व्यस्त सर्वर पर बहुत बड़ा हो सकता है।
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;
यह भी ध्यान दें कि केवल धीमी क्वेरी लॉग करने के लिए अतिरिक्त विकल्प हैं, या वे जो इंडेक्स का उपयोग नहीं करते हैं।
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
एक अन्य संबंधित प्रश्न के उत्तर पर एक नज़र डालें। यह दिखाता है कि पुनः आरंभ किए बिना लाइव सर्वर पर लॉग को सक्षम, अक्षम और कैसे देखें।
Mysql में सभी प्रश्नों को लॉग इन करें
यहाँ एक सारांश है:
यदि आप नहीं चाहते हैं या MySQL सर्वर को पुनरारंभ नहीं कर सकता है तो आप अपने रनिंग सर्वर पर इस तरह आगे बढ़ सकते हैं:
अपनी लॉग टेबल बनाएं ( उत्तर देखें )
डेटाबेस पर क्वेरी लॉगिंग सक्षम करें (ध्यान दें कि स्ट्रिंग 'तालिका' को शाब्दिक रूप से रखा जाना चाहिए और किसी तालिका नाम से प्रतिस्थापित नहीं किया जाना चाहिए। धन्यवाद निकोलस पिकरिंग )
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log;
SET global general_log = 0;
मैं लॉगिंग के लिए इस विधि का उपयोग करता हूं जब मैं विभिन्न पृष्ठ भारों को जल्दी से अनुकूलित करना चाहता हूं। यह एक छोटी सी टिप है ...
तालिका में प्रवेश करना
SET global general_log = 1;
SET global log_output = 'table';
आप तब मेरे से चयन कर सकते हैं mysql.general_log
हाल की क्वेरी को पुनः प्राप्त करने के लिए तालिका ।
मैं तब tail -f
mysql.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 सेकंड के अंतराल का उपयोग करता हूं।
यह पहले से ही एक टिप्पणी में था, लेकिन इसके खुद के जवाब के हकदार हैं: बिना विन्यास फाइल को संपादित किए: mysql में, रूट के रूप में,
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
बाद में इसे बंद करना न भूलें:
SET global general_log = off;
/tmp/
यह कहीं खत्म हो सकती है जैसे/tmp/systemd-private-...-mariadb.service-.../tmp/
आप सामान्य क्वेरी लॉग को निष्क्रिय कर सकते हैं या सक्षम कर सकते हैं (जो सभी प्रश्नों को लॉग करता है)
SET GLOBAL general_log = 1 # (or 0 to disable)
मैं प्रश्नों को देखने के लिए MySQL लॉग फ़ाइल को सक्षम करना चाहता था और मैंने नीचे दिए गए निर्देशों के साथ इसे हल किया है
/etc/mysql/mysql.conf.d
और नीचे की पंक्तियों को सक्षम करें
general_log_file = /var/log/mysql/mysql.log
general_log = 1
/etc/init.d/mysql restart
/var/log/mysql/
लॉग पर जाएं और जांचें// To see global variable is enabled or not and location of query log
SHOW VARIABLES like 'general%';
// Set query log on
SET GLOBAL general_log = ON;
विंडोज पर आप आसानी से जा सकते हैं
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
...
...
...
...
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"
आशा है कि यह किसी की मदद करेगा।
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
मैक मशीन में क्वेरी लॉग को सक्षम करने के लिए:
निम्न फ़ाइल खोलें:
vi /private/etc/my.cnf
'Mysqld' सेक्शन के अंतर्गत क्वेरी लॉग url को निम्नानुसार सेट करें:
[mysqld]
general_log_file=/Users/kumanan/Documents/mysql_query.log
कुछ मशीन ठीक से क्वेरी लॉग नहीं कर रहे हैं, ताकि आप MySQL कंसोल से इसे सक्षम कर सकें
mysql> SET global general_log = 1;
सवाल का जवाब बिल्कुल नहीं क्योंकि सवाल के पहले से ही शानदार जवाब हैं। यह एक पक्ष की जानकारी है। सामान्य रूप से सक्षम करना वास्तव में MySQL के प्रदर्शन पर सेंध लगाता है। मैंने general_log =1
गलती से एक प्रोडक्शन सर्वर पर छोड़ दिया और यह पता लगाने में घंटों बिता दिए कि प्रदर्शन अन्य सर्वरों पर समान सेटअप के बराबर क्यों नहीं था। तब मुझे यह मिला जो सामान्य लॉग को सक्षम करने के प्रभाव को बताता है। http://www.fromdual.com/general_query_log_vs_mysql_performance ।
कहानी का सार, फाइल general_log=1
में न डालें .cnf
। इसके बजाय set global general_log =1
एक संक्षिप्त अवधि के लिए उपयोग करें कि आप क्या पता लगाने की कोशिश कर रहे हैं और फिर इसे बंद करने के लिए पर्याप्त लॉग इन करें।
PhpMyAdmin 4.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'
इसलिए यदि "सुनिश्चित करने के लिए जाँच करें कि लॉगिंग चालू है" का मानक उत्तर आपके लिए काम नहीं करता है, तो यह सुनिश्चित करने के लिए जाँच करें कि आपके फ़ील्ड में सही वर्ण सेट है या नहीं।