Se você estiver executando com logs binários ativados, isso poderá ser verificado com confiabilidade relativamente alta.
Primeiro, para verificar se os logs binários estão realmente habilitados, execute:
SHOW BINARY LOGS;
Se eles estiverem ativados, você deverá obter uma saída como esta:
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000244 | 15462544 |
| mysql-bin.000245 | 102622775 |
+------------------+-----------+
Caso contrário, você receberá uma mensagem de erro.
Agora, se os logs binários estiverem ativados, qualquer confirmação bem-sucedida também será gravada nos logs binários. Eu digo "confirmar", mas a verdade é que qualquer operação bem-sucedida, mesmo em tabelas não transacionais como o MyISAM, está escrita lá. Mas, para ser honesto, para ter alguma certeza sobre o resultado de suas consultas, espero que você esteja usando um mecanismo transacional como o InnoDB, ou então não tenha certeza de nada.
OK, então, supondo que agora você tenha os logs binários ativados e que suas tabelas sejam transacionais (provavelmente InnoDB), espera-se que uma conclusão bem-sucedida de suas consultas seja gravada nos logs binários.
Agora você deve procurar o log binário relevante e procurar a consulta lá. Se você encontrar a consulta - bom! Se não - provavelmente não está lá. Eu vou explicar em breve.
Qual log binário contém sua consulta? Veja os próprios arquivos de log binário, normalmente no diretório de dados. Procure os carimbos de data e hora. Quando a energia chegou, um novo log binário foi criado. Encontre. Suas consultas provavelmente estão no log binário anterior àquele. Isso é um palpite. Também poderia ser um antes disso, etc. Mas é um bom palpite.
Agora, usando o mysqlbinlog
utilitário, execute, na linha de comando, algo como isto:
mysqlbinlog mysql-bin.000245
Substitua o nome do arquivo pelo que você suspeita conter a consulta.
Isso produzirá todas as consultas neste arquivo de log binário na saída padrão. No Unix, use grep
para encontrar sua consulta:
mysqlbinlog mysql-bin.000245 | grep "something which identifies the query"
No Windows, boa sorte. Abra com o bloco de notas ++ ou algo assim e pesquise manualmente.
A consulta está aí? Ótimo - você sabe que foi comprometido.
A consulta não está lá? Precisa verificar o sync_binlog
param. É 1 ? Em seguida, a consulta não está no log binário ==> consulta não confirmada. Mas, se sync_binlog
não for 1 , ainda poderá haver uma chance de a consulta ter sido confirmada, mas ainda não no log binário, pois a falha pode ter ocorrido logo após commit
e imediatamente antes do log binário ser liberado no disco. Você precisa reverter para outros meios.
Os seguintes são: (e espero que, novamente, você esteja usando o InnoDB): procure uma única linha que possa identificar o resultado da consulta. Com o InnoDB você obtém "tudo ou nada". Se você pode ter certeza de uma única linha afetada pela consulta - pode ter certeza de que a consulta foi concluída.
edit: é claro, se o log lento estiver ativado, você poderá esperar que uma consulta tão longa seja registrada lá após a conclusão também ...
Boa sorte!