Mostrando nomes de arquivos ao grepping de mysqlbinlog

1

Estou tentando descobrir quando algumas consultas foram executadas em nosso banco de dados. Para isso eu comecei a procurar em logs binários MySql, usando mysqlbinlog :

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

O problema é que dessa forma não consigo descobrir em qual arquivo ele encontra resultados, pois o grep obtém a entrada de sua entrada (através de pipe) e não de um arquivo direto.

Eu pensei em usar tee , mas não consegui.

Então, a pergunta: como usar find -exec mysqlbinlog... e grep, mostrando também o nome do arquivo onde o grep encontra o resultado?

    
por Andrei I 06.11.2014 / 13:46

2 respostas

1

Existem comentários e carimbos de data e hora que aparecem acima de cada comando SQL.

Quando você executa o grep, use a opção -A, -B ou -C .

O que isso faz é o seguinte

  • -A mostra um número de linhas depois que o padrão é encontrado
  • -B mostra um número de linhas antes que o padrão seja encontrado
  • -C mostra um número de linhas antes e depois do padrão ser encontrado

Por exemplo, execute o grep assim para incluir 2 linhas acima do padrão correspondente

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

Se você quiser a iteração através dos nomes e ver o nome do arquivo, faça isso

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

Experimente!

    
por 14.11.2014 / 23:46
0

Você precisa executar vários comandos no exec. Dê uma olhada em esta pergunta e nas diferentes respostas .

    
por 12.11.2014 / 10:37

Tags