मुझे पता है कि सामान्य प्रश्न है जो सभी प्रश्नों को लॉग करता है, लेकिन मैं यह जानना चाहता हूं कि कौन सी क्वेरी में कोई त्रुटि है, और त्रुटि संदेश प्राप्त करें। मैंने उद्देश्य पर एक त्रुटि क्वेरी चलाने का प्रयास किया है, लेकिन यह सामान्य क्वेरी के रूप में लॉग करता है और त्रुटि के साथ इसकी रिपोर्ट नहीं करता है। कोई विचार?mysql में त्रुटि प्रश्नों को कैसे लॉग इन करें?
उत्तर
मुझे पता है कि यह अब प्राचीन है, लेकिन किसी भी व्यक्ति के लिए जो Google से यहां है, यहां मेरे दो सेंट हैं।
यदि आप क्ली क्लाइंट का उपयोग कर रहे हैं, तो आप बस अपने स्टैर को एक फ़ाइल में रीडायरेक्ट कर सकते हैं, और फिर उसके माध्यम से पार्स कर सकते हैं।
mysql -u user -p 2> errors.log
मैं उद्देश्य पर एक त्रुटि क्वेरी चलाने की कोशिश की है, लेकिन यह एक सामान्य प्रश्न के रूप में लॉग करता है और त्रुटि के साथ यह रिपोर्ट नहीं करता। कोई भी विचार?
तो, आपने यह गलत किया। कोड के बिना कोई अन्य विचार नहीं।
PHP मेंमैं इसे इस तरह से कर रहा हूँ (आप mysql ड्राइवर का उपयोग कर रहे मान):
$res=mysql_query($sql) or trigger_error(mysql_error().$sql);
यह सब गलत क्वेरी को लॉग होगा यदि आप log_errors
है पर स्थापित करने (और आप के लिए है)
संपादित करें: अब मैं देखता हूं, आप वैश्विक स्तर के लॉगिंग चाहते हैं, एम आवेदन स्तर नहीं है। लेकिन क्या आवेदन स्तर भी आपके अनुरूप होगा?
मैं phpmyadmin 3.3.2 के माध्यम से इनपुट एसक्यूएल कर रहा हूं क्या वे गलत कर रहे हैं? –
@user phpmyadmin एकल-उपयोगकर्ता एप्लिकेशन है, इस प्रकार इसे किसी भी लॉगिंग की आवश्यकता नहीं है। –
अब मैं देख रहा हूं, मेरा उत्तर संपादित किया –
There is no functionality in MySQL to do this।
आपको एप्लिकेशन-लेयर लॉगिंग के साथ रहना होगा।
क्यों? एक सवाल - क्यों? क्या यह बहुत मुश्किल है ... बनाना? क्लाइंट को वापस फेंकते समय बस क्वेरी और त्रुटि लॉग करें .. –
@ सर्ज: मुझे नहीं पता। ऐसा लगता है कि इसे लागू करना बहुत कठिन नहीं होना चाहिए। शायद एक अलग-अलग चिंताओं की बात (यानी यह एसक्यूएल कथन सही करने के लिए ग्राहक की ज़िम्मेदारी है, और यह विफलता लॉग इन करने के लिए स्वतंत्र है)। –
भले ही यह प्रश्न काफी पुराना है, मुझे उम्मीद है कि यह किसी ऐसे व्यक्ति के लिए उपयोगी होगा जिसने mysql लॉग त्रुटि क्वेरी या इसी तरह की शर्तों की खोज की है।
बहुत समय पहले मुझे केवल गलत प्रश्नों को लॉग करने के लिए mysqld की आवश्यकता थी। मैंने पाया है कि mysql-प्रॉक्सी ऐसा करने के लिए सक्षम बनाता है और एक छोटे से LUA पटकथा लिखी:
local err_flag = false
function read_query(packet)
if packet:byte() == proxy.COM_QUERY then
local user = proxy.connection.client.username
local host = proxy.connection.client.src.name
if user:lower() == 'someuser' then -- change this to any condition where errors should be logged
proxy.queries:append(1, packet, {resultset_is_needed = true})
proxy.queries:append(2, string.char(proxy.COM_QUERY) .. "SET @last_query = '" .. string.sub(packet, 2) .. "'", {resultset_is_needed = true})
proxy.queries:append(3, string.char(proxy.COM_QUERY) .. "SHOW WARNINGS", {resultset_is_needed = true})
end
return proxy.PROXY_SEND_QUERY
end
end
function insert_query(err_t, err_n, err_m)
local query = "INSERT INTO `somedb`.`mysql_error` " .. -- change log destination
"(`date`, `err_num`,`err_type`, `err_message`, `problem_query`, `conn_id`)" ..
" VALUES (NOW(), " ..
err_n .. "," .. "\"" ..
err_t .."\"" .. "," .. "\"" ..
err_m .. "\"" .. "," ..
"@last_query" .. "," ..
proxy.connection.server.thread_id .. ")"
proxy.queries:append(4, string.char(proxy.COM_QUERY) .. query, {resultset_is_needed = true})
return proxy.PROXY_SEND_QUERY
end
function read_query_result(inj)
local res = assert(inj.resultset)
if inj.id == 1 then
err_flag = false
if res.query_status == proxy.MYSQLD_PACKET_ERR then
err_flag = true
return proxy.PROXY_IGNORE_RESULT
end
elseif inj.id == 2 then
return proxy.PROXY_IGNORE_RESULT
elseif inj.id == 3 then
if err_flag == true then
for row in res.rows do
proxy.response.type = proxy.MYSQLD_PACKET_ERR
proxy.response.errmsg = row[3]
insert_query(row[1], row[2], row[3])
end
return proxy.PROXY_SEND_RESULT
end
return proxy.PROXY_IGNORE_RESULT
elseif inj.id == 4 then
return proxy.PROXY_IGNORE_RESULT
end
end
DDL प्रवेश तालिका के लिए की जरूरत है, somedb
समायोजित करें। mysql_error
पसंद करने के लिए, लेकिन उपरोक्त LUA स्क्रिप्ट में ऐसा करने के लिए मत भूलना।
CREATE TABLE `somedb`.`mysql_error` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` datetime NOT NULL,
`err_num` smallint(6) NOT NULL,
`err_type` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`err_message` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`problem_query` varchar(8000) COLLATE utf8_unicode_ci NOT NULL,
`conn_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
, स्क्रिप्ट का उपयोग करने के लिए
/path/to/mysql-proxy --proxy-lua-script=/path/to/mysql-proxy-log-error-queries.lua
चलाने के लिए या कि अगर विफल रहता है (> = v0.9)
/path/to/mysql-proxy --proxy-lua-script=/path/to/mysql-proxy-log-error-queries.lua --plugins=proxy
प्रॉक्सी डिफ़ॉल्ट रूप से बंदरगाह 4040
पर चलता है , परीक्षण करने के लिए:
mysql -u username -p --host=127.0.0.1 --port=4040
और कुछ दोषपूर्ण एसक्यूएल चलाएं।
जब सब कुछ लगता है कि आपके अनुप्रयोग में बंदरगाह को वास्तविक mysqld पोर्ट के बजाय 4040 पर सेट किया गया है और आपके पास डेटाबेस स्तर पर mysql त्रुटि लॉगिंग है।
अंतिम नोट: mysql-proxy बीटा है। मुझे लगता है कि सावधानी के साथ प्रयोग करें। बिना किसी समस्या के लगभग आधे साल तक यहां चल रहे थे, हालांकि वाईएमएमवी।
अच्छा, उस पर जाना था और अंत में काम करने के लिए थोड़ी देर लग गई, लेकिन एक आकर्षण की तरह काम करता है। बीटीडब्ल्यू, यह बीटा भी नहीं है, यह अभी भी अल्फा है। http://dev.mysql.com/downloads/mysql-proxy/ –
क्या यह प्रदर्शन हत्यारा नहीं है? मुझे लगता है कि क्लाइंट साइड पर त्रुटि प्रबंधन ठीक होगा – Zaffy
यह काम करता है। महान! – hellojinjie
MariaDB Audit Plugin के साथ त्रुटि प्रश्नों को लॉग करना संभव है।
मारियाडीबी ऑडिट प्लगइन मारिया डीबी, माईएसक्यूएल और पेर्कोना सर्वर के लिए काम करता है।
उदाहरण के लिए, इन प्रश्नों
select now();
select now()+();
select 9+();
select 'hello';
लॉग के लिए इस तरह लगता है:
20150807 23:00:36,mnv-Satellite-L300D,root,localhost,82,377,QUERY,`test`,'select now()
LIMIT 0, 1000',0
20150807 23:00:37,mnv-Satellite-L300D,root,localhost,82,379,QUERY,`test`,'select now()+()',1064
20150807 23:00:37,mnv-Satellite-L300D,root,localhost,82,382,QUERY,`test`,'select 9+()',1064
20150807 23:00:38,mnv-Satellite-L300D,root,localhost,82,383,QUERY,`test`,'select \'hello\'
LIMIT 0, 1000',0
अंतिम स्तंभ वापसी कोड है। 0 ठीक है। अन्य - त्रुटि।
- 1. इंडेक्स के बिना mySQL प्रश्नों को कैसे लॉग इन करें?
- 2. PostgreSQL प्रश्नों को कैसे लॉग इन करें?
- 3. MySQL अमान्य प्रश्नों का लॉग
- 4. दो mysql प्रश्नों को PHP/MYSQL में कैसे निष्पादित करें?
- 5. कमांड लाइन: MySQL में लॉग इन करें और एक पंक्ति
- 6. mysql प्रश्नों को अनुकरण करें
- 7. डीबीयूजी के साथ डीजेगो एसक्यूएल प्रश्नों को लॉग इन करने के लिए लॉग इन
- 8. ओरेकल पैकेज में सभी अपवादों को कैसे लॉग इन करें?
- 9. couchdb में लॉग इन कंसोल कैसे करें
- 10. ec2 मशीन में कैसे लॉग इन करें?
- 11. जूमला डीबग लॉग इन 446 प्रश्नों को लॉग क्यों करता है और 446 विरासत क्वेरी लॉग इन क्यों करती है?
- 12. फाइल करने के लिए सभी सिद्धांत प्रश्नों को कैसे लॉग इन करें?
- 13. django ट्रेसबैक त्रुटि में django लॉग इन उपयोगकर्ता शामिल करें
- 14. व्यवस्थापक के रूप में गेरिट को कैसे लॉग इन करें
- 15. NSAssert को Xcode4 में विवरण कैसे लॉग इन करें?
- 16. ट्रंकेट धीमी क्वेरी लॉग इन MySQL
- 17. mysql अलग-अलग उपयोगकर्ता के रूप में लॉग इन
- 18. उपयोगकर्ता की आईडी में लॉग इन करें
- 19. PHP के माध्यम से फ़ाइल लॉग इन करें या MySQL डेटाबेस पर लॉग इन करें - जो तेज़ है?
- 20. CoreData SQL क्वेरी कैसे लॉग इन करें?
- 21. अपवाद लॉग इन कब करें?
- 22. लॉग इन C++ कैसे बनाएं?
- 23. त्रुटि संकलन "का प्रयोग करें फेसबुक लॉग इन उदाहरण"
- 24. हर विधि लॉग इन करें?
- 25. जेपीए मानदंडबिल्डर प्रश्नों को डीबग कैसे करें
- 26. इन तीन MySQL प्रश्नों के बीच क्या अंतर है?
- 27. पायथन में लॉग इन करना?
- 28. gra4 में log4j: फ़ाइल में लॉग इन कैसे करें?
- 29. लॉग इन
- 30. लॉग फ़ाइलों के बजाय डेटाबेस पर लॉग इन करें
धन्यवाद, फ़ाइल में लॉग इन करने के बजाय, यह नहीं पता था। मैंने इसे डेटाबेस में लॉग ऑन किया है। चीयर्स। –