Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich eine E-Mail erhalten, wenn meine MySQL-Tabelle aktualisiert wird?

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