2010-12-11 10 views
6

Estoy buscando una solución similar al método de inotify para ver los archivos en busca de cambios. Soy consciente de que podía ver el archivo binlog de la base de datos mysql y ejecutar consultas para seleccionar los nuevos resultados, pero eso parece muy ineficiente y poco elegante; al igual que simplemente hacer una gran cantidad de consultas en un bucle en espera de nuevos resultados.¿Hay alguna manera de ver una base de datos mysql para cambios usando perl?

+7

http://stackoverflow.com/questions/3501346/how-do-i-hook-into-an-event-triggered-once-a-mysql-query-is-true – daxim

Respuesta

6

Si agrega un TRIGGER a la (s) tabla (s) que le interesan, puede usarlas para alertar a la aplicación de observación. Puede hacerlo de varias maneras:

  1. Cree una tabla de auditoría en la base de datos y haga que el desencadenador escriba allí la información relevante; y haz que tu aplicación de observación sondee la tabla de auditoría para nuevas entradas. Todavía está sondeando, pero de forma controlada, lo que no afectará demasiado al servidor.
  2. Tienen el gatillo call an external app a través de una UDF.
+3

Eso es lo que [ya comenté hace 6 días] (http://stackoverflow.com/q/4418598#comment-4820725) como respuesta ya existente. Disfruta de tu generosidad – daxim

+2

FWIW, agregué esta respuesta antes de haber notado su comentario (que hice upvote); y la primera de mis soluciones sugeridas es diferente a la tuya. Yo genuinamente no estaba plagiando. –

+1

@daxim: si querías la recompensa, ¡deberías haber publicado tu comentario como respuesta! ;-) – Brad

1

En cuanto a las tablas MyISAM, puede ver information_schema.TABLES.UPDATE_TIME. Eso le evitaría sondear todas las tablas que le interesan. Para InnoDB, ver bitlog es lo mejor que se me ocurre.

+0

1 de INFORMATION_SCHEMA. TABLES.UPDATE_TIME – DVK

0

Otro enfoque es hacer un push/signal en lugar de una encuesta DB. Haga que cualquier proceso actualice la base de datos, notifique a su código Perl que se realizó una actualización a través de cualquier IPC que escoja (diablos, un archivo de registro adjunto con el nombre de la tabla que se está modificando podría hacer el truco lo suficientemente bien).

Esto es especialmente efectivo si las actualizaciones son bastante raras/de bajo volumen, pero el tiempo de reacción para ellas debe ser rápido.

Una ventaja adicional es la portabilidad: funciona para cualquier back-end MySQL o para cualquier otro motor DB.

+0

Desafortunadamente, esta no es una opción, ya que la base de datos se actualiza mediante algún otro programa de terceros que estoy usando y el script de Perl que estoy escribiendo no actualiza la base de datos. – Drake

Cuestiones relacionadas