greping múltiplas linhas do log binário do MySql

1

Eu tenho o log binário do MySQL e preciso gerar um determinado período de tempo em um arquivo separado, como eu faria isso?

aqui está uma amostra do que o arquivo binlog contém:

# at 460
#130120  0:09:17 server id 1  end_log_pos 487   Xid = 79514636
COMMIT/*!*/;
# at 487
#130120  0:09:17 server id 1  end_log_pos 560   Query   thread_id=248447    exec_time=0 error_code=0

Estou procurando o seguinte:

#130120  0:09:17 server id 1  end_log_pos 487   Xid = 79514636
COMMIT/*!*/;
# at 487

Eu tentei pcregrep -M , mas até agora sem nenhuma sorte, minhas habilidades de regex não estão onde eu pensei, aqui está minha linha real:

# mysqlbinlog /var/lib/mysql/log/logbin/mysql-bin.001036 | pcregrep -M '130120(\n|.*)\ at\ '
# 

* UPDATE *

  • número de linhas entre varia entre diferentes consultas.

* UPDATE 2 *

isso realmente fez o trabalho ...

# mysqlbinlog /var/lib/mysql/log/logbin/mysql-bin.001036 | sed -e '/130120 13/,/ at /!d' > /tmp/13
#
    
por alexus 22.01.2013 / 17:45

4 respostas

0

A verdadeira resposta é usar as opções de linha de comando para mysqlbinlog

mysqlbinlog --start-datetime=datetime --stop-datetime=datetime /path/to/mysql-bin.001036

    
por 23.01.2013 / 03:00
1

Isso poderia ter sido feito com awk com muita facilidade.

Por exemplo

mysqlbinlog mysql-bin.001 | awk '($1 == "130120") {print $0}' > results.txt

Isso diz ao awk para encontrar qualquer coisa na primeira coluna que corresponda a 130120 exatamente e depois imprima toda a linha.

Se você precisasse do minuto e segundo exatamente , você poderia fazer algo como o seguinte:

awk '(($1 == "130120") && ($2 == "0:09:17")) {print $0}'

Se você apenas precisasse do minuto, você poderia usar algo assim:

awk '(($1 == "130120") && ($2 ~ "^0:09:")) {print $0}'
    
por 23.01.2013 / 02:36
0

isso fez o trabalho:

# mysqlbinlog /var/lib/mysql/log/logbin/mysql-bin.001036 | sed -e '/130120 13/,/ at /!d' > /tmp/13
#
    
por 22.01.2013 / 18:39
-1
grep -C 1 COMMIT filename

-C é contexto, 1 linha antes e 1 linha depois

-A é depois

-B é antes

    
por 22.01.2013 / 17:53