MySQL में संग्रहीत कार्यविधि से डिबगिंग जानकारी प्रिंट करें


84

क्या MySQL में एक तरीका है डिबगिंग संदेशों को स्टडआउट, प्रलोभन या लॉगफाइल में प्रिंट करना? कुछ इस तरह:

  • print SQLServer में
  • DBMS_OUTPUT.PUT_LINE ओरेकल में

incron का उपयोग कर कहीं से भी लोग इन stackoverflow.com/a/41766032/953374
bortunac

जवाबों:


117

विकल्प 1: इसे अपनी प्रक्रिया में 'टिप्पणी' प्रिंट करने के लिए रखें जब यह चलता है।

SELECT 'Comment';

विकल्प 2: इसे अपनी प्रक्रिया में इसके साथ एक वेरिएबल प्रिंट करने के लिए रखें:

declare myvar INT default 0;
SET myvar = 5;
SELECT concat('myvar is ', myvar);

myvar is 5जब प्रक्रिया चलती है तो यह प्रिंटआउट करता है।

विकल्प 3, एक पाठ स्तंभ के साथ एक तालिका बनाएं tmptable, और इसे संदेशों को धक्का दें:

declare myvar INT default 0;
SET myvar = 5;
insert into tmptable select concat('myvar is ', myvar);

आप उपरोक्त को एक संग्रहित प्रक्रिया में रख सकते हैं, इसलिए आपको यह लिखना होगा:

CALL log(concat('the value is', myvar));

जो कुछ कीस्ट्रोक्स को बचाता है।

विकल्प 4, फ़ाइल में लॉग इन करें संदेश

select "penguin" as log into outfile '/tmp/result.txt';

इस आदेश पर बहुत भारी प्रतिबंध हैं। आप केवल डिस्क पर उन क्षेत्रों के लिए संगठन लिख सकते हैं जो 'अन्य' समूह को अनुमति देते हैं और अनुमतियाँ लिखते हैं। इसे / tmp निर्देशिका को सहेजने का काम करना चाहिए।

एक बार जब आप आउटफिट लिखते हैं, तो आप इसे ओवरराइट नहीं कर सकते। यह पटाखे आपके बॉक्स को जड़ने से रोकने के लिए है क्योंकि उन्होंने SQL को आपकी वेबसाइट पर इंजेक्ट किया है और MySQL में मनमाना कमांड चला सकते हैं।


3
mysql शिकायत करती है Not allowed to return a result set from a trigger, कोई विचार?
जेरी चिन

संभवतः आपने लगभग 3 वर्षों में समस्या का समाधान किया, लेकिन त्रुटि से छुटकारा पाने के लिए आउटपुट का उपयोग करें।
गेब्रियल क्लेसरु



5

मैं आमतौर पर लॉग इन करने के लिए एक संग्रहीत कार्यविधि के साथ लॉग टेबल बनाता हूं। विकास के तहत प्रक्रिया से जहां भी आवश्यकता हो लॉगिंग प्रक्रिया को कॉल करें।

इसी प्रश्न पर अन्य पोस्टों को देखते हुए , यह एक सामान्य अभ्यास की तरह लगता है, हालांकि कुछ विकल्प हैं।


5
लॉग टेबल MyISAM, या अन्य गैर-लेन-देन भंडारण इंजन होना चाहिए, ताकि आप भी लुढ़का हुआ लेनदेन का पता लगा सकें,
gaborsch

4

यह तरीका है कि मैं कैसे डीबग करूंगा:

CREATE PROCEDURE procedure_name() 
BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        SHOW ERRORS;  --this is the only one which you need
        ROLLBACK;   
    END; 
    START TRANSACTION;
        --query 1
        --query 2
        --query 3
    COMMIT;
END 

यदि क्वेरी 1, 2 या 3 में कोई त्रुटि होगी, तो HANDLER SQLEXCEPTION को पकड़ेगी और SHOW ERRORS हमारे लिए त्रुटियां दिखाएंगे। नोट: शैंड्रर में पहला विवरण होना चाहिए।

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