MySQL में लॉग फाइल कैसे देखें?


176

मैंने पढ़ा है कि Mysql सर्वर एक लॉग फ़ाइल बनाता है जहां यह सभी गतिविधियों का रिकॉर्ड रखता है - जैसे कि कब और क्या क्वेरी निष्पादित होती है।

क्या कोई मुझे बता सकता है कि यह मेरे सिस्टम में कहां मौजूद है? मैं इसे कैसे पढ़ सकता हूं?

मूल रूप से, मुझे अलग-अलग इनपुट के साथ डेटाबेस का बैकअप लेने की आवश्यकता है [दो तिथियों के बीच बैकअप] इसलिए मुझे लगता है कि मुझे यहां लॉग फ़ाइल का उपयोग करने की आवश्यकता है, इसलिए मैं इसे करना चाहता हूं ...

मुझे लगता है कि इस लॉग को किसी तरह सुरक्षित किया जाना चाहिए क्योंकि संवेदनशील जानकारी जैसे कि उपयोगकर्ता नाम और पासवर्ड लॉग किया जा सकता है [अगर किसी भी क्वेरी के लिए इसकी आवश्यकता है]; तो यह सुरक्षित हो सकता है, आसानी से देखा नहीं जा सकता है?

मेरे पास सिस्टम तक रूट एक्सेस है, मैं लॉग को कैसे देख सकता हूं?

जब मैं /var/log/mysql.log खोलने की कोशिश करता हूं तो यह खाली है।

यह मेरी विन्यास फाइल है:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

जवाबों:


164

यहाँ उन्हें सक्षम करने का एक सरल तरीका है। Mysql में हमें अक्सर 3 लॉग देखने होते हैं जो कि किसी भी प्रोजेक्ट डेवलपमेंट के दौरान आवश्यक होते हैं।

  • The Error Log। इसमें सर्वर के चलने के दौरान होने वाली त्रुटियों के बारे में जानकारी होती है (सर्वर स्टार्ट और स्टॉप भी)

  • The General Query Log। यह mysqld क्या कर रहा है (कनेक्ट, डिस्कनेक्ट, क्वेरी) का एक सामान्य रिकॉर्ड है

  • The Slow Query Log। Ιt में "धीमी" एसक्यूएल स्टेटमेंट होते हैं (जैसा कि इसके नाम से संकेत मिलता है)।

डिफ़ॉल्ट रूप से कोई लॉग फ़ाइल MYSQL में सक्षम नहीं हैं। सभी त्रुटियों को syslog ( /var/log/syslog) में दिखाया जाएगा ।

उन्हें सक्षम करने के लिए बस नीचे दिए गए चरणों का पालन करें:

चरण 1: इस फ़ाइल ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) पर जाएं और उन पंक्ति को हटा दें या टिप्पणी करें।

Step2: mysql conf file ( /etc/mysql/my.cnf) में जाएं और निम्नलिखित पंक्तियों को जोड़ें

त्रुटि लॉग को सक्षम करने के लिए निम्नलिखित जोड़ें

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

सामान्य क्वेरी लॉग को सक्षम करने के लिए निम्नलिखित जोड़ें

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

धीमा क्वेरी लॉग को सक्षम करने के लिए निम्नलिखित जोड़ें

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

चरण 3: फ़ाइल को सहेजें और निम्नलिखित आदेशों का उपयोग करके mysql को पुनरारंभ करें

service mysql restart

रनटाइम पर लॉग को सक्षम करने के लिए, mysql क्लाइंट ( mysql -u root -p) में लॉगिन करें और दें:

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

अंत में एक बात मैं यहां बताना चाहूंगा कि क्या मैंने इसे एक ब्लॉग से पढ़ा है । धन्यवाद। इससे मेरा काम बनता है।

ब्लॉग पर जाने के लिए यहाँ क्लिक करें


2
मुझे लगता है कि आप कुछ चीजें लिखने के लिए 'भूल गए'। चरण 1 अधूरा है और वाक्य 'ब्लॉग' लिंक गायब है
Athafoud

हाय, @Athafoud, कृपया अब लिंक ढूंढें।
लोयला

3
लिंक किए गए ब्लॉग लेख में संशोधन /etc/mysql/conf.d/mysqld_safe_syslog.cnfकेवल तभी होता है जब त्रुटि लॉग को सक्षम किया जाना है। हालाँकि, यह उत्तर जैसा कि वर्तमान में लिखा गया है, यह किसी भी लॉग के लिए सुझाव देता प्रतीत होता है।
मेलेबियस

2
मेरा सर्वर-संस्करण 5.6.35 है। रॉस स्मिथ द्वितीय के जवाब यहाँ मेरे लिए काम करता है। मुझे सेट करना है slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.logऔर long_query_time = 60[mysqld] के तहत। जब मैं आपके कॉन्फ़िगरेशन के साथ शुरू करने की कोशिश करता हूं, तो सर्वर शुरू हो रहा है, लेकिन थोड़ा धीमा और त्रुटियों के साथ। मैं वास्तव में संस्करणों में अंतर का अनुमान लगाता हूं और बाद के संस्करणों में चर-नामों को एकजुट करना चाहता था। इसके अलावा: IMHO 2 सेकंड लंबा नहीं है।
जैकलेमरदेउर

1
उन फ़ाइलों पर अनुमति के बारे में क्या? मैंने देखा है कई मामलों में लॉग फाइल नहीं बनती है।
मेगेप्सिच्को

42

आपको mysql में क्वेरी लॉगिंग को सक्रिय करना होगा।

  1. /etc/my.cnf संपादित करें

    [Mysqld]
    लॉग = / tmp / mysql.log
    
  2. कंप्यूटर या mysqld सेवा को पुनरारंभ करें

    सेवा mysqld पुनरारंभ
    
  3. phpmyadmin / mysql / mysql कंसोल का उपयोग करने वाला कोई भी एप्लिकेशन खोलें और एक क्वेरी चलाएँ

  4. cat /tmp/mysql.log (आपको प्रश्न देखना चाहिए)


कोई फर्क नहीं पड़ता, बस यह सुनिश्चित करें कि db
danidacar

6
अवैध मार्ग। आपके पास /etc/my.cnf /etc/mysql/my.cnf होना चाहिए
रहस्यवादी कोला

39

MySQL लॉग वैश्विक चर द्वारा निर्धारित किए जाते हैं जैसे:

  • log_error त्रुटि संदेश लॉग के लिए;
  • general_log_fileसामान्य क्वेरी लॉग फ़ाइल के लिए (यदि सक्षम है general_log);
  • slow_query_log_fileधीमी क्वेरी लॉग फ़ाइल के लिए (यदि सक्षम है slow_query_log);

सेटिंग्स और उनके स्थान को देखने के लिए, इस शेल कमांड को चलाएं:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

त्रुटि लॉग का मान मुद्रित करने के लिए, टर्मिनल में यह कमांड चलाएँ:

mysql -e "SELECT @@GLOBAL.log_error"

वास्तविक समय में त्रुटि लॉग फ़ाइल की सामग्री को पढ़ने के लिए, चलाएं:

sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")

नोट: हिट Control- Cजब खत्म

जब सामान्य लॉग सक्षम किया जाता है, तो प्रयास करें:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")

mysqlपासवर्ड एक्सेस के साथ उपयोग करने के लिए , पैरामीटर जोड़ें -pया -pMYPASS। इसे याद रखने के लिए, आप इसे अपने ~/.my.cnfजैसे में कॉन्फ़िगर कर सकते हैं

[client]
user=root
password=root

तो यह अगली बार के लिए याद किया जाएगा।


1
या यदि आपको पासवर्ड दर्ज करने की आवश्यकता है, तो यह प्रयास करें: mysql -p -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log
पॉल चेरोच

9

मेरे (मेरे पास LAMP इंस्टॉल है) / etc / mysql /my.cnf फ़ाइल जो मुझे निम्नलिखित मिली, [mysqld] अनुभाग में पंक्तियाँ टिप्पणी की गईं:

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

मुझे टर्मिनल के साथ इस फाइल को सुपर यूजर के रूप में खोलना था:

sudo geany /etc/mysql/my.cnf

(मैं gedit या VI के बजाय Geany का उपयोग करना पसंद करता हूं, इससे कोई फर्क नहीं पड़ता)

मैंने बस उन्हें अनफॉलो कर दिया और फाइल को सेव किया और फिर mysql को रीस्टार्ट किया

sudo service mysql restart

फ़ाइल (/var/log/mysql/mysql.log) के ऊपर कई क्वेरीज़ चलाएँ, और लॉग वहाँ था :)


हालांकि यह आपके लिए काम कर सकता है, यह मेरे लिए नहीं है, यहां तक ​​कि "इंडेक्स करप्टेड" जैसे प्रमुख अपवाद भी लॉग इन नहीं करते हैं। केवल स्टार्टअप और शटडाउन मुद्दे।
user3338098

8

MySQL संदर्भ मैनुअल से:

डिफ़ॉल्ट रूप से, सभी लॉग फ़ाइलें डेटा निर्देशिका में बनाई जाती हैं।

/var/lib/mysqlफ़ोल्डर की जाँच करें ।


1
लेकिन मैं mysql फ़ोल्डर खोलने में असमर्थ हूं। मुझे लगता है कि लॉग फ़ाइल का पथ /var/log/mysql/mysql.log है लेकिन इसे खोलने में असमर्थ है, मुझे क्या करना चाहिए?
अर्जुन

2
मैं अपने आप को कैसे मूल बनाता हूं, मुझे लगता है कि मैं im मालिक हूं, मैं सर्वर स्थापित करता हूं, मैं पासवर्ड सेट करता हूं, इसलिए मुझे मालिक होना चाहिए, फिर भी यह मेरे लिए बंद है, मैं इसे कैसे खोल सकता हूं?
अर्जुन

1
मैंने इस निर्देशिका में सीडी को मजबूर किया (मुझे रूट उपयोगकर्ता बनाना था, जिसे मैंने बाद में हटा दिया था), लेकिन जब मैंने इस फ़ाइलों को देखा, तो मैंने सोचा कि वे एन्क्रिप्टेड हैं :) इसलिए मुझे लगता है कि यह एक अच्छा तरीका नहीं है।
लाइन

का उपयोग sudo -sतो mysql फ़ोल्डर में जाने के लिए प्रयास करें।
रसाडुल इस्लाम

MySQL मैनुअल कई विसंगतियों से भरा है, किसी भी तरह से विंडोज़ पर ऐसी कोई निर्देशिका नहीं है।
user3338098

3

लोयोला के उत्तर के पूरक के लिए यह ध्यान देने योग्य है कि MySQL 5.1 के रूप में log_slow_queriesपदावनत किया जाता है और इसे बदल दिया जाता हैslow-query-log

उपयोग करने log_slow_queriesसे आपके service mysql restartया service mysql startविफल हो जाएंगे


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
Stackoverflow में आपका स्वागत है। कृपया अपने स्पष्टीकरण के बारे में अधिक जानकारी देने पर विचार करें कि आपके उत्तर का कोड ओपी के प्रश्न के लिए कैसे प्रासंगिक है। साथ ही, उचित स्वरूपण को सक्षम करने के लिए कोड को 4 स्थानों द्वारा इंडेंट किया जाना चाहिए।
पोलितैंक-जेड

1

ऊपर दिए गए उत्तरों के अलावा आप कमांड लाइन के मापदंडों को अपनी गोपनीय फ़ाइल को मैन्युअल रूप से संपादित करने के बजाय लॉगिंग विकल्पों के लिए mysqld प्रक्रिया में पारित कर सकते हैं। उदाहरण के लिए, सामान्य लॉगिंग और फ़ाइल को निर्दिष्ट करने के लिए:

mysqld --general-log --general-log-file=/var/log/mysql.general.log

उपरोक्त अन्य उत्तरों की पुष्टि करते हुए, mysqld --help --verboseआपको फ़ाइल से मान मिलते हैं (इसलिए कमांड लाइन विकल्पों के साथ चलना सामान्य-लॉग FALSE है); जबकि mysql -se "SHOW VARIABLES" | grep -e log_error -e general_logदेता है:

general_log     ON
general_log_file        /var/log/mysql.general.log

त्रुटि लॉग के लिए थोड़ा और कॉम्पैक्ट सिंटैक्स का उपयोग करें:

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