Logo

Datenbank-Trigger startet lokales Skript

Ein UPDATE oder INSERT in einer Datenbank soll ein lokales Skript starten. Dazu gibt es eigentlich mehrere Möglichkeiten:

  • Polling. Polling ist aber keine schöne Lösung, für kurze Antwortzeiten muss das Skript häufig laufen und verbrennt dafür unnötig Resourcen.
  • MySQL-UDF. Damit kann man zwar lokale Skripte aus Triggern heraus starten, benötigt aber eine Erweiterung, die grundsätzlich sicherheitsproblematisch ist.
  • Trigger mit "SELECT ... INTO OUTFILE '<filename>'". Damit kann man zwar eine Datei anlegen, aber nicht ausführen. Existiert die Datei schon, scheitert das UPDATE.

Ich habe eine andere Möglichkeit gewählt. MySql speichert alle Daten im Ordner /var/lib/mysql/<datenbank>/, dieses Verzeichnis lasse ich mit inotify überwachen und starte dann mein beliebiges Skript.

Zuerst benötigt man inotify: $ apt-get install inotify-tools

#!/bin/sh
#
#
#
while inotifywait -e modify /var/lib/mysql/databasename; do
cd / && run-parts --report /usr/local/bin/script-to-start.sh| mail -s "Update" mail@example.de

Das Skript kann man dann mit $ nohup skript.sh & starten und es startet bei jeder Datenbank-Änderung das gewünschte Skript.



05.10.2016, 21:10
Kommentare:



Mobil:
Diese Seite in der mobil-Version
Was geht:
Bier
IT-News
E-Mail

Projekte:
Content-Management

Valid HTML 4.01!