• User

    Come monitorare in tempo reale database Mysql

    Ciao a tutti. Come da titolo mi chiedevo se sia possibile monitorare un database Mysql in tempo reale.
    Spiego nel dettaglio cosa vorrei fare.
    Su Aruba ho un database Mysql con una serie di tabelle e in una di queste vengono registrati dei dati inviati automaticamente da un macchinario.
    Ogni volta che viene inserito un dato nella tabella vorrei che questo sia inferiore ad un determinato valore. Se il valore viene superato mi deve pervenire un messaggio di errore tramite SMS o email.
    Quindi vorrei che ci fosse un controllo dei dati in tempo reale.
    Secondo voi è possibile farlo?
    Ciao, grazie.


  • Moderatore

    è possibile, inizia a buttare giù un po' di righe di codice e se vuoi ci lavoriamo assieme


  • User Attivo

    Non mi sembra una grande idea inviare email o SMS dal database.... cmq: e' un hosting condiviso? Il macchinario che registra i dati come si interfaccia a MySQL? Direttamente?

    In teoria potresti creare un trigger che on create oppure on update faccia il controllo che ti serve e poi ti mandi il messaggio. Per SMS ti suggerisco di usare Twilio, via REST API, che ti permette di mandare un SMS con una semplice chiamata a quella API. Nel trigger useresti una "SELECT http_post(...)" (vedi esempio http://blogs.ethernerve.com/post/116183081917/send-sms-from-mysql-triggers e http://www.mooreds.com/wordpress/archives/1497)

    Ma ti sconsiglio di fare una cosa del genere nel database e inoltre potrebbe non funzionare per restrizioni di sicurezza soprattutto se si tratta di hosting condiviso.

    Molto meglio invece, sempre con un trigger, potresti - se puoi fare a meno del tempo reale e ti va bene ricevere le notifiche con max un minuto di ritardo - inserire una riga in una tabella apposita per le notifiche, con un flag "inviato" o qualcosa del genere che per default e' settato su false. Poi crei uno script PHP etc che controlla quella tabella, prende le notifiche non ancora inviate e invia per ciascuna di esse una email o SMS (oppure una sola email con tutte le notifiche non ancora ricevute), settando il flag su true cosi' quelle notifiche vengono ignorate dopo aver inviato il messaggio. Infine, una entry CRON si preoccupa di eseguire quello script ogni minuto. Questo potrebbe funzionare se hai la possibilita' di configurare CRON col tuo hosting account. In questo modo, avendo una apposita tabella avresti anche un log degli eventi da notificare, che potresti consultare anche visitando una pagina.

    Farlo "in tempo reale" e' piu' complicato e dubito riusciresti a farlo con un hosting condiviso. Se invece hai admin access a MySQL, allora potresti avere un'app che monitora i bin logs di MySQL.... ma sta roba diventa complicata. Molto piu' semplice avere quella tabella per le notifiche e uno script con CRON che la processa e invia i messaggi...


  • User

    Ciao a tutti e grazie per le risposte.
    Inizialmente avevo pensato di fare in questo modo: il macchinario effettua la lettura ed invia il dato alla tabella. Inserito il dato nella tabella volevo verificare se questo supera un valore limite oppure no.
    Ora penso di affrontare il problema in maniera leggermente diversa: il macchinario effettua la lettura e prima di inviare il dato alla tabella verifica se supera il valore limite. Fatta la verifica il dato viene registrato e, se supera il valore limite, viene inviato un SMS o email di errore.