Se si esegue con i registri binari abilitati, questo può essere verificato con un'affidabilità relativamente elevata.
Innanzitutto, per verificare se i registri binari sono effettivamente abilitati, eseguire:
SHOW BINARY LOGS;
Se sono abilitati, dovresti ottenere un output come questo:
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000244 | 15462544 |
| mysql-bin.000245 | 102622775 |
+------------------+-----------+
Altrimenti riceveresti un messaggio di errore.
Ora, se i registri binari sono abilitati, anche qualsiasi commit eseguito correttamente viene scritto nei registri binari. Dico "commit", ma la verità è che qualsiasi operazione riuscita, anche su tabelle non transazionali come MyISAM, è scritta lì. Ma, ad essere onesti, per avere delle certezze sull'esito delle tue domande, spero per il tuo bene che stai usando un motore transazionale come InnoDB, altrimenti non puoi essere sicuro di nulla.
OK, supponendo ora che i log binari siano attivi e che le tabelle siano transazionali (si spera InnoDB), si prevede che un completamento corretto delle query venga scritto nei log binari.
È ora necessario cercare il registro binario pertinente e cercare la query lì. Se trovi la query, va bene! In caso contrario, molto probabilmente non è lì. Spiegherò a breve.
Quale registro binario contiene la tua query? Guarda i file di registro binari stessi, in genere nella directory dei dati. Cerca i loro timestamp. All'accensione, è stato creato un nuovo registro binario. Trovalo. Molto probabilmente le tue domande si trovano nel registro binario prima di quello. Questa è un'ipotesi. Potrebbe anche essere uno prima, ecc. Ma è una buona ipotesi.
Ora, usando l' mysqlbinlog
utilità, esegui, dalla riga di comando, qualcosa del genere:
mysqlbinlog mysql-bin.000245
Sostituisci il nome del file con quello che ritieni contenga la query.
Ciò genererà tutte le query in questo file di registro binario nell'output standard. Su Unix, usa grep
per trovare la tua query:
mysqlbinlog mysql-bin.000245 | grep "something which identifies the query"
Su Windows, buona fortuna. Apri con notepad ++ o qualcosa del genere e cerca manualmente.
La query è lì? Ottimo - sai che è stato commesso.
La query non è presente? È necessario controllare su sync_binlog
param. È 1 ? Quindi query non nel registro binario ==> query non impegnata. Ma se sync_binlog
non è 1 , potrebbe esserci ancora la possibilità che la query sia stata impegnata ma non nel registro binario, poiché potrebbe essersi verificato l'arresto anomalo subito dopo commit
e immediatamente prima che il registro binario fosse scaricato sul disco. È quindi necessario ripristinare altri mezzi.
Quelli che sono: (e si spera, di nuovo, stai usando InnoDB): cerca una singola riga in grado di identificare il risultato della query. Con InnoDB ottieni "tutto o niente". Se puoi essere certo di una singola riga interessata dalla query, puoi essere sicuro che la query è stata completata.
modifica: ovviamente, se è abilitato il log lento, puoi aspettarti che una query così lunga venga registrata anche dopo il completamento ...
In bocca al lupo!