Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso ricevere un'e-mail quando la mia tabella MySQL viene aggiornata?

Il modo migliore per raggiungere questo obiettivo sarebbe utilizzare un trigger e un cron. Crea una tabella "coda di notifica" e compilala con un trigger quando una riga viene inserita nella tabella desiderata.

es.

CREATE TABLE `notification_queue` (
  `notification_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `sent` tinyint(1) unsigned NOT NULL,
  PRIMARY KEY (`notification_id`)
);

Quindi definisci un semplice 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 ;

Da quel momento, tutto ciò che devi fare è eseguire un crontab sul server (diciamo ogni minuto) che seleziona dalla notification tabella dove sent = 0 , invia la notifica e imposta sent = 1

Per quanto ne so, questo è il modo migliore per estrarre tali informazioni dal DB senza leggere i registri dei contenitori.

Se hai bisogno di un esempio dello script da eseguire con cron:

#!/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