cola -f equivalente para la base de datos de registro de MySQL

12

Se decidió que deberíamos usar una base de datos (MySQL) para los registros de nuestras aplicaciones (es una aplicación Java que utiliza la lib de inicio de sesión). Espero encontrar algo así tail -fque pueda usar con una tabla específica en esa base de datos que me muestre nuevas filas a medida que se agregan (similar a cómo tail -ffuncionó en los archivos de registro).

Nick Spacek
fuente

Respuestas:

5

Active el registro binario de MySQL. Luego puede usar el mysqlbinlogcomando para ver todas las declaraciones de modificación de datos.

200_success
fuente
¿Puedes mostrar un ejemplo de cómo hacerlo en el idioma que elijas o con bash?
Alexander Mills
7

No creo que algunas personas entiendan la pregunta (o yo no). No desea registrar las consultas en la base de datos; más bien un registro de una aplicación va a una base de datos. Si se tratara de un archivo, podría seguir el registro. ¿Cómo se ajusta una tabla para que, cuando se agregue una nueva fila, salga?

No debería ser difícil escribir un bucle simple para manejar esto, suponiendo que tenga un campo único que aumenta monotónicamente con el tiempo (por ejemplo, un número de secuencia).

current_pos = select max(seq) from table
while true
  new_pos = select max(seq) from table
  if new_pos > current_pos
    select * from table where seq > current_pos
    current_pos = new_pos
  endif
  sleep 1
endwhile
Mark Wagner
fuente
esto se llama sondeo y no es tan divertido :) pero supongo que es una buena técnica, si debe usar el sondeo.
Alexander Mills
3

Parece que muchos de nosotros no entendemos bien su pregunta. ¿Qué quiere decir con "base de datos de registro" , que no es un término estándar de MySQL.

Utilice el registro de consulta general de MySQL , que registra cada declaración recibida de un cliente.

Luego puede configurar log_output = TABLE en su my.cnf. El archivo se escribirá en $ mysql_data_directory / general_log.CSV. Puede tail -feste archivo para ver consultas en tiempo real.

Stefan Lasiewski
fuente
2

Esto es lo que uso. Parece la solución más simple, aunque no es muy eficiente:

watch "mysql db_name -e '(SELECT * FROM my_table ORDER BY id DESC LIMIT 10) ORDER BY id ASC;'"

Jud
fuente
1

Puede hacerlo de una manera hacky usando cola -f en el archivo de base de datos (/var/lib/mysql/database_name/table_name.MY*) y luego ejecutando su consulta cada vez que se lee una línea.

James L
fuente
1

Sugiero agregar un campo de marca de tiempo a cualquier tabla que desee seguir. Eso le permitirá obtener los resultados deseados muy fácilmente con una simple consulta.

John Gardeniers
fuente