mysqlbinlog, Executando as Consultas a Partir de um Log Binário
Você pode examinad o arquivo de log binário (see "O Log Binário") com o utilitário mysqlbinlog.
shell> mysqlbinlog hostname-bin.001
exibirá todas as consultas contidas no log binário hostname-bin.001, junto com outras informações (tempo da consulta, ID da thread que a executou, o timestamp de quando foi executada, etc).
Você pode colocar a saída do mysqlbinlog em um cliente MariaDB; isto é usado para recuperações de falhas quando você tem um backup antigo (see "Backups dos Bancos de Dados"):
shell> mysqlbinlog hostname-bin.001 | mysql
ou
shell> mysqlbinlog hostname-bin.[0-9]* | mysql
Você também pode redirecionar a saída do mysqlbinlog para um arquivo texto, então modifique este arquivo texto (para excluir as consultas que você não quer executar por alguma razão), e então execute as consultas a partir do arquivo texto dentro do MariaDB.
mysqlbinlog possui a opção position=# que exibirá apenas as consultas cujo offset no log binário é maior ou igual a #.
Se você tiver mais que um log binário para executar no servidor MySQL, o método seguro é fazê-lo em uma única conexão MariaDB. Aqui está o que pode ser INseguro:
shell>mysqlbinlog hostname-bin.001 | mysql # DANGER!!shell>mysqlbinlog hostname-bin.002 | mysql # DANGER!!
Isto causará problemas se o primeiro log binário conter um CREATE TEMPORARY TABLE e o segundo contém uma consulta que utiliza esta tabela temporária: quando o primeiro MariaDB termina, ele apara a tabela temporária, assim a o segundo MariaDB relatará um tabela desconhecida
. Isto ocorre porque você deve executar todos os log binários que você deseja em uma única conexão, especialmente se você usa tabelas temporárias. Aqui estão dois modos possíveis:
shell> mysqlbinlog hostname-bin.001 hostname-bin.002 | mysql
shell>mysqlbinlog hostname-bin.001 > /tmp/queries.sqlshell>mysqlbinlog hostname-bin.002 >> /tmp/queries.sqlshell>mysql -e 'source /tmp/queries.sql'
A partir do MariaDB 4.0.14, mysqlbinlog pode preparar uma entrada para o MariaDB executar um LOAD DATA INFILE a partir de um log binário. Como o log binário contém os dados para carregar (isto é verdade para o MariaDB 4.0; o MariaDB 3.23 não grava o dado carregado em um log binário, assim o arquivo original era necessário quando se queria executar o conteúdo do log binário), mysqlbinlog copiará este data para um arquivo temporário e imprime um comando LOAD DATA INFILE para o MariaDB carregar este arquivo temporário. O local onde o arquivo temorário é criado é o diretório temporário por padrão; ele pode ser alterado com a opção local-load do mysqlbinlog.
Antes do MariaDB, mysqlbinlog não podia preaparar saída cabíveis para MariaDB quando o log binário continha consultas de diferentes threads usando tabelas temporárias de mesmo nome, se estas consultas eram entrelaçadas. Isto está resolvido no MariaDB 4.1.
Você também pode usar o mysqlbinlog --read-from-remote-server para ler o log binário diretamente de um servidor MariaDB remoto. No entanto, isto é algo que está obsoleto já que queremos tornar fácil de se aplicar os logs binários em servidores MariaDB em execução.
mysqlbinlog --help lhe dará mais informações