Der beste Weg, dies zu erreichen, wäre die Verwendung eines Triggers und eines Cron. Erstellen Sie eine Tabelle „Benachrichtigungswarteschlange“ und füllen Sie diese mit einem Trigger, wenn eine Zeile in die gewünschte Tabelle eingefügt wird.
zB.
CREATE TABLE `notification_queue` (
`notification_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`sent` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`notification_id`)
);
Definieren Sie dann einen einfachen Trigger:
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 ;
Von diesem Punkt an müssen Sie nur noch eine Crontab auf dem Server ausführen (z. B. jede Minute), die aus der notification
auswählt Tabelle mit sent = 0
, senden Sie die Benachrichtigung und setzen Sie sent = 1
Soweit ich weiß, ist das der beste Weg, diese Informationen aus der DB zu bekommen, ohne die Bin-Logs zu lesen.
Wenn Sie ein Beispiel für das Skript benötigen, das mit cron ausgeführt werden soll:
#!/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