хвост -f эквивалент для базы данных журналов MySQL

12

Было решено, что нам следует перейти к использованию базы данных (MySQL) для журналов наших приложений (это приложение Java, использующее библиотеку logback). Я надеюсь найти что-то подобное, tail -fчто я могу использовать с конкретной таблицей в этой базе данных, которая покажет мне новые строки по мере их добавления (аналогично тому, как tail -fработали над файлами журналов).

Ник Спейсек
источник

Ответы:

5

Включите бинарное ведение журнала MySQL. Затем вы можете использовать mysqlbinlogкоманду, чтобы увидеть все операторы, изменяющие данные.

200_success
источник
Можете ли вы показать пример того, как это сделать на выбранном вами языке или с помощью bash?
Александр Миллс
7

Я не думаю, что некоторые люди понимают вопрос (или я не понимаю). Вы не хотите регистрировать запросы к БД; скорее журнал из приложения собирается в БД. Если бы это был файл, вы могли бы вести журнал. Как вы настраиваете таблицу, чтобы при добавлении новой строки она выводилась?

Не должно быть сложно написать простой цикл для обработки этого, предполагая, что у вас есть уникальное поле, которое монотонно увеличивается со временем (например, порядковый номер).

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
Марк Вагнер
источник
это называется опросом, и это не так весело :), но я полагаю, это хорошая техника, если вы должны использовать опрос.
Александр Миллс
3

Похоже, что многие из нас не совсем поняли ваш вопрос. Что вы подразумеваете под «журналированием базы данных» , что не является стандартным термином MySQL.

Используйте общий журнал запросов MySQL , в котором регистрируется каждый оператор, полученный от клиента.

Затем вы можете установить log_output = TABLE в вашем my.cnf. Файл будет записан в $ mysql_data_directory / general_log.CSV. Вы можете tail -fэтот файл для просмотра запросов в режиме реального времени.

Стефан Ласевский
источник
2

Вот что я использую. Кажется, самое простое решение, хотя оно не очень эффективно:

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

Джад
источник
1

Вы можете сделать это хакерским способом, используя tail -f в файле базы данных (/var/lib/mysql/database_name/table_name.MY*) и затем выполняя запрос каждый раз, когда читается строка.

Джеймс Л
источник
1

Я предлагаю добавить поле метки времени к любой таблице, которую вы хотите привязать. Это позволит вам легко получить желаемые результаты с помощью простого запроса.

Джон Гарденье
источник