Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je recevoir un e-mail lorsque ma table MySQL est mise à jour ?

La meilleure façon d'y parvenir serait d'utiliser un déclencheur et un cron. Créez une table "file d'attente de notification" et remplissez-la avec un déclencheur lorsqu'une ligne est insérée dans la table souhaitée.

ex.

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

Définissez ensuite un déclencheur simple :

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 ;

À partir de ce moment, tout ce que vous avez à faire est de lancer une crontab sur le serveur (disons toutes les minutes) qui sélectionne à partir de la notification table où sent = 0 , envoyez la notification et définissez sent = 1

Autant que je sache, c'est le meilleur moyen d'extraire ces informations de la base de données sans lire les journaux bin.

Si vous avez besoin d'un exemple de script à exécuter avec 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