जवाबों:
MySQL> = 5.1.12 से धन्य लोगों के लिए, आप इस विकल्प को वैश्विक स्तर पर रनटाइम पर नियंत्रित कर सकते हैं:
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
mysql.general_log
यदि आप किसी तालिका के बजाय किसी फ़ाइल में आउटपुट करना पसंद करते हैं:
SET GLOBAL log_output = "FILE";
डिफ़ॉल्ट ।SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
मैं संपादन के लिए इस विधि को पसंद करता हूं। क्योंकि फाइल को:
my.cnf
फ़ाइल को संपादित नहीं कर रहे हैं और संभवतः स्थायी रूप से लॉगिंग चालू कर रहे हैं/var/log /var/data/log
/opt /home/mysql_savior/var
अधिक जानकारी के लिए, MySQL 5.1 संदर्भ मैनुअल - सर्वर सिस्टम चर - general_log देखें
आप उस तरह के डायग्नोस्टिक के लिए एक सामान्य क्वेरी लॉग को सक्षम कर सकते हैं । आम तौर पर आप एक उत्पादन सर्वर पर सभी चयनित प्रश्नों को लॉग नहीं करते हैं, हालांकि यह एक प्रदर्शन हत्यारा है।
अपने MySQL कॉन्फिगर को एडिट करें, जैसे /etc/mysql/my.cnf - इस तरह से एक लाइन देखें या जोड़ें
[mysqld]
log = /var/log/mysql/mysql.log
उस परिवर्तन को लेने के लिए mysql को पुनरारंभ करें, अब आप कर सकते हैं
tail -f /var/log/mysql/mysql.log
जैसे ही वे आते हैं, आप प्रश्नों को देख सकते हैं।
आप mysql क्वेरी लॉग की निगरानी के लिए बहने वाली चीज़ कर सकते हैं।
Mysql कॉन्फ़िगरेशन फ़ाइल my.cnf खोलें
sudo nano /etc/mysql/my.cnf
एक [mysqld]
शीर्षक के तहत निम्नलिखित पंक्तियों को खोजें और लॉग को सक्षम करने के लिए इन पंक्तियों को अनसुना करें
general_log_file = /var/log/mysql/mysql.log
general_log = 1
परिवर्तनों को प्रतिबिंबित करने के लिए अपने mysql सर्वर को पुनरारंभ करें
sudo service mysql start
टर्मिनल में निम्नलिखित कमांड के साथ mysql सर्वर लॉग की निगरानी करें
tail -f /var/log/mysql/mysql.log
1) यदि सामान्य mysql लॉगिंग सक्षम है, तो हम लॉग फ़ाइल या तालिका में उन प्रश्नों की जांच कर सकते हैं जो हमने कॉन्फ़िगरेशन में बताए हैं। निम्न कमांड के साथ सक्षम है की जाँच करें
mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';
अगर हमें टेबल में क्वेरी हिस्ट्री चाहिए
Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';
तालिका mysql.general_log पर एक नज़र डालें
यदि आप किसी फ़ाइल में आउटपुट करना पसंद करते हैं:
SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
2) हम .mysql_history फ़ाइल बिल्ली ~ / .mysql_h में प्रश्नों की भी जाँच कर सकते हैं।
हो सकता है कि आप क्वेरी लॉग को देखकर यह पता लगा सकें ।
यदि mysql binlog सक्षम है तो आप mysql binlog निर्देशिका में ब्राउज़ करके linux कंसोल में निम्नलिखित कमांड निष्पादित करके उपयोगकर्ता द्वारा चलाए गए आदेशों की जांच कर सकते हैं।
mysqlbinlog binlog.000001 > /tmp/statements.sql
सक्रिय करने के
[mysqld]
log = /var/log/mysql/mysql.log
या सामान्य लॉग का mysql के प्रदर्शन पर प्रभाव पड़ेगा
यदि आपको अपना MySQL कॉन्फ़िगरेशन बदलने का मन नहीं है, तो आप "Neor Profile SQL" http://www.profilesql.com जैसे SQL प्रोफाइलर का उपयोग कर सकते हैं ।
पॉल के उत्तर को पढ़ने के बाद, मैं https://dev.mysql.com/doc/refman/5.7/en/query-log.html पर अधिक जानकारी के लिए खुदाई करता रहा।
मुझे एक व्यक्ति द्वारा वास्तव में उपयोगी कोड मिला। यहाँ संदर्भ का सारांश दिया गया है।
(नोट: निम्नलिखित कोड मेरा नहीं है)
यह स्क्रिप्ट तालिका को साफ रखने के लिए एक उदाहरण है जो आपको अपनी तालिका का आकार कम करने में मदद करेगी। एक दिन के बाद, लॉग के लगभग 180k प्रश्न होंगे। (एक फ़ाइल में, यह प्रति दिन 30MB होगा)
आपको एक अतिरिक्त कॉलम (Event_unix) जोड़ने की आवश्यकता है और फिर आप लॉग को साफ रखने के लिए इस स्क्रिप्ट का उपयोग कर सकते हैं ... यह टाइमस्टैम्प को यूनिक्स-टाइमस्टैम्प में अपडेट करेगा, 1 दिन से पुराने लॉग को हटा देगा और फिर इवेंट_टाइम को टाइमस्टैम्प में अपडेट कर देगा। Event_unix से ... थोड़ा भ्रमित करने वाला लगता है, लेकिन यह बहुत अच्छा काम कर रहा है।
नए कॉलम के लिए कमांड:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
सफाई स्क्रिप्ट:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
क्रेडिट सेबस्टियन कैसर (कोड के मूल लेखक) को जाता है।
आशा है कि किसी को यह उपयोगी लगेगा जैसा मैंने किया।
आप लिनक्स में निम्नलिखित देख सकते हैं
cd /root
ls -al
vi .mysql_history
यह मदद कर सकता है