Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso receber um e-mail quando minha tabela MySQL for atualizada?


A melhor maneira de conseguir isso seria usando um gatilho e um cron. Crie uma tabela de 'fila de notificação' e preencha-a com um gatilho quando uma linha for inserida na tabela desejada.

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

Em seguida, defina um gatilho simples:
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 ;

A partir desse ponto, tudo o que você precisa fazer é executar um crontab no servidor (digamos, a cada minuto) que seleciona na notification tabela onde sent = 0 , envie a notificação e defina sent = 1

Até onde eu sei, essa é a melhor maneira de obter essas informações do banco de dados sem ler os logs bin.

Se você precisar de um exemplo do script para executar com o 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