NOTA: O log de atualizações está obsoleto e foi substituído pelo log binário. See Secção 4.10.4, “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 MySQL 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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.