1

Я пытаюсь выяснить, когда некоторые запросы были выполнены на нашей БД. Для этого я начал искать в бинарных журналах MySql, используя mysqlbinlog:

find -name "binlog.000056*" -exec mysqlbinlog {} \; | grep -i "update .* my_special_column=value"

Проблема в том, что таким образом я не могу выяснить, в каком файле он находит результаты, поскольку grep получает входные данные от своего ввода (через канал), а не из прямого файла.

Я думал, используя tee , но не удалось.

Итак, вопрос: как использовать find -exec mysqlbinlog... и grep, показывая также имя файла, где grep находит результат?

2 ответа2

1

Есть комментарии и метки времени, которые появляются над каждой командой SQL.

Когда вы запускаете grep, используйте опцию -A, -B или -C.

Что это делает, это следующее

  • -A показывает количество строк после того, как образец найден
  • -B показывает количество строк до того, как образец найден
  • -C показывает количество строк до и после нахождения шаблона

Например, запустите grep следующим образом, чтобы включить 2 строки над соответствующим шаблоном

find -name "binlog.000056*" -exec mysqlbinlog {} \; | grep -i -B 2 "update .* my_special_column=value"

Если вы хотите перебрать имена и увидеть имя файла, сделайте это

for X in `ls binlog.000056*` ; do echo ${X} ; mysqlbinlog ${X} | grep -i -B 2 "update .* my_special_column=value" ; done

Попробуйте!

0

Вам нужно запустить несколько команд в exec. Посмотрите на этот вопрос и разные ответы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .