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


12

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

Відповіді:


5

Увімкніть бінарний журнал MySQL. Потім ви можете скористатися mysqlbinlogкомандою для перегляду всіх операторів, що змінюють дані.


чи можете ви показати приклад того, як це зробити на вибраній вами мові або з 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

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


1

Я пропоную додати поле часової позначки до будь-якої таблиці, на яку ви хочете піти. Це дозволить отримати прості результати дуже просто за допомогою простого запиту.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.