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.sql
shell>mysqlbinlog hostname-bin.002 >> /tmp/queries.sql
shell>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