これを実現する最良の方法は、トリガーとcronを使用することです。 「通知キュー」テーブルを作成し、目的のテーブルに行が挿入されたときにトリガーをそのテーブルに入力します。
例
CREATE TABLE `notification_queue` (
`notification_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`sent` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`notification_id`)
);
次に、単純なトリガーを定義します。
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 ;
その時点から、あなたがする必要があるのは、notification
から選択するサーバー上で(たとえば毎分)crontabを実行することです。 sent = 0
のテーブル 、通知を送信し、sent = 1
を設定します
私の知る限り、これがbinログを読み取らずにDBからその情報を取得するための最良の方法です。
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