इसे प्राप्त करने का सबसे अच्छा तरीका ट्रिगर और क्रॉन का उपयोग करना होगा। एक 'सूचना कतार' तालिका बनाएं और वांछित तालिका में एक पंक्ति डालने पर ट्रिगर के साथ पॉप्युलेट करें।
उदा.
CREATE TABLE `notification_queue` (
`notification_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`sent` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`notification_id`)
);
फिर एक साधारण ट्रिगर परिभाषित करें:
DELIMITER $$
CREATE TRIGGER t_notification_insert
AFTER INSERT ON [table_being_inserted]
FOR EACH ROW
BEGIN
INSERT INTO `notification_queue` (`sent`) VALUES (0);
END$$
DELIMITER ;
उस बिंदु से, आपको केवल सर्वर पर एक क्रॉस्टैब चलाने की आवश्यकता है (हर मिनट कहें) जो notification
से चयन करता है तालिका जहां sent = 0
, अधिसूचना भेजें और सेट करें sent = 1
जहाँ तक मुझे पता है, बिन लॉग पढ़े बिना उस जानकारी को DB से बाहर निकालने का यह सबसे अच्छा तरीका है।
यदि आपको क्रॉन के साथ चलने के लिए स्क्रिप्ट के उदाहरण की आवश्यकता है:
#!/bin/bash
DB_USER=''
DB_PASS=''
DB_NAME=''
ID=`mysql -u$DB_USER -p$DB_PASS $DB_NAME -Bse "SELECT notification_id FROM notification_queue WHERE sent=0 LIMIT 1;"`
if [[ ! -z $ID ]]
then
# SEND MAIL HERE
RESULT=`mysql -u$DB_USER -p$DB_PASS $DB_NAME -Bse "UPDATE notification_queue SET sent=1 WHERE notification_id = $ID;"`
echo "Sent"
fi