MySQL SYS_EXEC Example With Trigger

यदि आप MySQL से किसी External Exe या कोई URL को कॉल करना चाहते हैं तो हमें sys_exec को उपयोग में लेना होता हैं, यह एक UDF (User Defined Function) हैं, जैसा की हम सभी जानते हैं की MySQL से कोई भी External कमांड Direct नहीं चला सकते इसके लिए कुछ Steps हमें Follow करने होते हैं

यहाँ पर Sys का मतलब System से हैं और Exec का मतलब Execution से हैं, sys_exec को हम एक तरह से OS Command In MySQL भी कह सकते हैं क्युकी हम यहाँ पर UDF का उपयोग करते हैं

MySQL Sys_exec को Example से समझाए

हम मान लेते हैं की हमें जब कोई टेबल में डाटा इन्सर्ट हो तब कोई URL कॉल करना हैं तो उसके लिए हमें जो Concept उपयोग में लाना हैं वह इस प्रकार रहेगा

  • जिस टेबल में डाटा इन्सर्ट होने पर कार्य करना हैं उस पर एक ट्रिगर लिखना होगा
  • ट्रिगर से एक sys_exec फंक्शन को कॉल करना होगा
  • उसके बाद हम sys_exec फंक्शन से cURL का Use करके हम URL कॉल कर देंगे

Sys_exec on Shared Server

  • Shared Server पर कार्य नहीं करता हैं इसके लिए आपको Dedicated Server लेना होता हैं, या आप अपनी लोकल मशीन को सर्वर बनवा सकते हैं
  • sys_exec MySQL के सभी Version में नहीं चलता और इसलिए आपको MySQL का 8.0 वर्शन सेट करना होगा

cURL की जरुरत क्यू हैं ?

  • अब हमें CURL का सेटअप करना होगा क्युकी CURL से ही हम किसी URL को कॉल कर सकते हैं
  • cURL को हमें जो sys_exec सेटअप की हैं उससे एक्सेक्यूटे करेंगे
  • URL कॉल कॉल करने पर हम दूसरे सर्वर पर वह डाटा सेंड कर सकते हैं जो इस टेबल में इन्सर्ट हुआ था

निचे सभी स्टेप दी गई हैं जीसे आप sys_exec को सेटअप कर सकते हैं

1. Windows Setup

  • Window 7 64 Bit
  • Window Update Service Pack 1
  • Dot Net 4.5
  • Microsoft Visual C++

2. MySQL Server Setup

  • MySQL 64Bit 8.5 (mysql-installer-community-8.0.15.0)
  • https://dev.mysql.com/downloads/installer/
    • उपरोक्त वेबसाइट से आप mysql-installer-community-8.0.15.0 वर्शन या इसके आसपास का वेर्स्टीओं डाउनलोड कर ले
  • उसके बाद जो भी सेटअप करने के रूल्स हैं उनको फॉलो करते जाये
  • सेटअप कम्पलीट होने के बाद लॉगिन करे और डेटाबेस क्रिएट करे
CREATE DATABASE DbName;

3. UDF Setup

  • Download lib_mysqludf_sys.dll From
  • https://github.com/selflearntech/mysql-sys-exec/blob/main/lib_mysqludf_sys.dll
  • Copy lib_mysqludf_sys.dll File to C:\Program Files\MySQL\MySQL Server 8.0\lib\plugin
  • Set Path C:\Program Files\MySQL\MySQL Server 8.0\lib\plugin
  • Proper सेटअप हो जाने के बाद एक बार सिस्टम को रीस्टार्ट करे और उसके बाद यह कमांड Execute करे
DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;
 DROP FUNCTION IF EXISTS sys_get;
 DROP FUNCTION IF EXISTS sys_set;
 DROP FUNCTION IF EXISTS sys_exec;
 DROP FUNCTION IF EXISTS sys_eval;
 CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.dll';
 CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys.dll';
 CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys.dll';
 CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.dll';
 CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.dll';

यदि यह कमांड नहीं चल रही हैं या Error दे रही हो तो प्रॉपर सभी स्टेप चेक करे, यदि UDF फाइल का बिट चेंज हुआ तो प्रॉब्लम आ सकती हैं

4. cURL Setup

  • Download cURL from https://curl.se/download.html
    • इस वेबसाइट पर आपको सभी ऑपरेटिंग सिस्टम के हिसाब से कर्ल मिल जाएगी डाउनलोड करने पर आपको एक फोल्डर curl मिलेगा उसको आप जहा पर भी रखे उसका path सेट करना होता हैं .
  • Set Path :\curl\bin;
  • Copy three file from [curl\for system32] to system32
    • Path सेट करने के बाद आपको इस फोल्डर से यह तीन फाइल कॉपी करके सिस्टम 32 फोल्डर में पेस्ट करना होगी
    • Curl.exe
    • libcurl-4.dll
    • libcurl.dll.a

5. SQLYog

  • यहाँ पर आप कोई भी टूल उपयोग कर सकते हैं जिससे आप डेटाबेस टेबल और ट्रिगर लिख सके, यह टूल चलने में सरल होता हैं इसलिए हमने इसका उपयोग किया हैं ।
  • SQL Yog को लॉगिन करने के बाद निचे Database Setup की प्रोसेस दी गई हैं उससे सेटअप करे

6. Database Setup

  • 6.1 हमने डाटाबेस पहले बना लिया था, अब उस डेटाबेस में हमें एक टेबल बनाना हैं जिसका Syntax निचे लिखा हैं

USE DbName;

CREATE TABLE TableName (
id int(11) NOT NULL AUTO_INCREMENT,t_dt date DEFAULT NULL,
t_tm time DEFAULT NULL,PRIMARY KEY (id)) ;
  • 6.2 टेबल बनने के बाद आपको उस पर एक Trigger लिखना हैं ताकि जैसे ही टेबल में Row इन्सर्ट होगी वैसे ही Trigger execute होगा और जो भी अपने URL दी हैं वह Call हो जाएगी
DELIMITER $$
 drop trigger ins_TableName $$
 CREATE TRIGGER ins_TableName AFTER INSERT ON TableName
 for each row BEGIN
  declare RetVal int(9);
  select sys_exec(concat('curl "http://yourURL/page.php', '?id=', new.id, '&date=',new.t_dt, '&time=', new.t_tm, '"')) into RetVal;
END;$$
DELIMITER ;

आप यहाँ पर एक से अधिक Trigger लिख सकते हैं अभी हमें केवल इन्सर्ट पर Trigger लिखा हैं यदि आप Update और Delete पर भी Trigger लिखना चाहे तो लिख सकते हैं


Send HTTP request from MySQL trigger

उपरोक्त उदहारण से आप MySQL Trigger से PHP सर्वर पर Request Send कर सकते हैं ।

ध्यान देने योग्य

  • यदि कही पर भी समस्या आ रही हैं तो एक एक स्टेप को प्रॉपर चेक करे
  • यदि आपके PC का ऑपरेटिंग सिस्टम के बिट और lib_mysqludf_sys.dll के बिट में अंतर हुआ तो भी यह फाइल कार्य नहीं करती
  • हमने पूरा सेटअप 64Bit के हिसाब से किया हैं
  • कोई भी इंस्टालेशन के बाद PC को रीस्टार्ट जरूर करे कभी कभी रीस्टार्ट होने के बाद ही फाइल Execution होती हैं ।

यदि Trigger लिखने में कोई समस्या आये तो आप Comment कर सकते हैं

One Comment

Add a Comment

Your email address will not be published. Required fields are marked *