O Log de Atualizações
NOTA: O log de atualizações está obsoleto e foi substituído pelo log binário. Leia "O Log Binário". O log binário pode fazer qualquer coisa que poderia ser feito com o log de atualizações, e mais. O log de atualização será removido no MariaDB 5.0
Quando iniciado com a opção --log-update[=nome_arquivo]
, o mysqld
grava um arquivo log contendo todos os comandos SQL que atualizam dados. Se nenhum arquivo for fornecido, o nome da máquina é usado. Se um nome de arquivo for fornecido, mas não possuir o caminho, o arquivo é gravado no diretório de dados. Se nome_arquivo
não possuir uma extensão, o mysqld
irá criar os arquivos com os nomes desta forma: nome_arquivo.###
, onde ###
é um número que é incrementado cada vez que mysqladmin refresh
, mysqladmin flush-logs
ou a instrução FLUSH LOGS
forem executados ou o servidor for reiniciado.
NOTA: Para o esquema acima funcionar, você não pode criar seus próprios arquivos com o mesmo nome que os do log de atualização + algumas extensões que podem ser tratadas como números, no diretório usado pelo log de atualização!
Se forem utilizadas as opções --log
ou -l
, o mysqld
escreve um log geral com o nome de arquivo nome_máquina.log
, e o reinicio e a recarga não geram um novo arquivo de log (embora ele seja fechado e reaberto). Neste caso você pode copiá-lo (no Unix) usando:
mv nome_máquina.log nome_máquina-antigo.log mysqladmin flush-logs cp nome_máquina-antigo.log para-diretório-backup rm nome_máquina-antigo.log
O log de atualização é inteligente pois registra somente instruções que realmente alteram dados. Portanto, um UPDATE
ou um DELETE
com uma cláusula WHERE
que não encontre nenhum registro não é escrito no log. Ele salta até instruções UPDATE
que atribui a uma coluna o mesmo valor que ela possuia.
O registro da atualização é feito imediatamente após uma consulta estar completa mas antes que as bloqueios sejam liberados ou que algum commit seja feito. Isto garante que o log seja escrito na ordem de execução.
Se você desejar atualizar um banco de dados a partir de arquivos de logs de atualização, você pode fazer o seguinte (assumindo que seus logs de atualização estejam nomeados na forma nome_arquivo.###
):
shell> ls -1 -t -r nome_arquivo.[0-9]* | xargs cat | mysql
ls
é utilizado para obter todos os arquivos de log na ordem correta.
Isto pode ser útil se você tiver que recorrer a arquivos de backup depois de uma falha e desejar refazer as atualizações que ocorreram entre a hora do backup e a falha.