Recupero dopo aver sbagliato MySQL query di aggiornamento?

Ho fatto un aggiornamento sbagliato query nella tabella.

Ho dimenticato di fare un campo id di WHERE clausola.

In modo che l’aggiornamento di tutti i miei righe.

Come recuperare?

Non ho fatto un backup….

  • Lezione imparata: backup, backup, backup.
  • grazie a tutti , inizierò da zero.
InformationsquelleAutor assaqqaf | 2010-01-31



4 Replies
  1. 12

    L’uomo spiacente, ma le possibilità di ripristino di una sovrascritto MySQL database di solito sono vicini allo zero. Diverso l’eliminazione di un file, sovrascrivendo un record effettivamente e fisicamente sovrascrive i dati esistenti nella maggior parte dei casi.

    Essere preparati se qualcosa arriva qui, si deve interrompere il server MySQL, e fare una copia fisica di directory che contiene il database in modo che nulla può essere sovrascritto ulteriormente: Un semplice copia e incolla della cartella di dati in una posizione diversa dovrebbe fare.

    Ma non illudete – penso che non c’è niente che può essere fatto proprio.

    È possibile impostare il backup di un database frequenti backup per il futuro. Ci sono molte soluzioni in giro; il più semplice, più affidabile e più facile da automatizzare (utilizzando at o cron in Linux, o l’utilità di pianificazione di Windows) è MySQL propria mysqldump.

  2. 15

    Ci sono due lezioni da imparare qui:

    1. Dati di Backup
    2. Eseguire UPDATE/DELETE all’interno di una transazione, in modo che è possibile utilizzare ROLLBACK se le cose non vanno come previsto

    Di essere a conoscenza della transazione (autocommit, esplicita e implicita) gestione del database può salvare da dover ripristinare i dati da un backup.

    Operazioni di controllo per la manipolazione dei dati statement(s), per garantire che essi sono atomica. Essere “atomica” significa che la transazione si verifica, o non. L’unico modo per segnalare il completamento della transazione di database utilizzando un COMMIT o ROLLBACK istruzione (secondo ANSI-92, che purtroppo non includono la sintassi per la creazione/inizio di una transazione, in modo da esso è specifico del fornitore). COMMIT applica le eventuali modifiche apportate all’interno di una transazione. ROLLBACK prescinde da qualsiasi azione ha avuto luogo all’interno di una transazione – altamente auspicabile, quando un’istruzione UPDATE/DELETE fa qualcosa di involontario.

    Prettamente individuali DML (Insert, Update, Delete) istruzioni vengono eseguite in un autocommit transazioni sono impegnata non appena l’istruzione completa con successo. Il che significa che non c’è possibilità di ripristinare il database di stato prima della dichiarazione di aver gestito in casi come il tuo. Quando qualcosa va storto, il solo restauro opzione disponibile è quello di ricostruire i dati da un backup (fornendo ne esiste uno). In MySQL, autocommit è per per impostazione predefinita per InnoDB – MyISAM non supporta le transazioni. Può essere disattivato tramite l’utilizzo di:

    SET autocommit = 0

    Una transazione esplicita è quando statement(s) sono avvolto all’interno di un definito esplicitamente transazione il codice di blocco per MySQL, che TRANSAZIONE. Si richiede, inoltre, un fatto esplicitamente COMMIT o ROLLBACK istruzione alla fine della transazione. Transazioni nidificate è oltre la portata di questo argomento.

    Implicita transazioni sono leggermente diversi da esplicite quelle. Implicito operazioni non richiedono esplicitamente la definizione di una transazione. Tuttavia, come le transazioni esplicite che essi richiedono una COMMIT o ROLLBACK dichiarazione di essere in dotazione.

    Conclusione

    Transazioni esplicite sono la soluzione più indicata richiedono una dichiarazione, COMMIT o ROLLBACK, per finalizzare la transazione, e ciò che sta accadendo è chiaramente indicato per gli altri a leggere se vi è una necessità. Implicito transazioni sono OK, se si lavora con i database in modo interattivo, ma COMMIT dichiarazioni deve essere specificata solo una volta che i risultati sono stati testati & fondo determinato per essere valido.

    Che significa che si dovrebbe usare:

    SET autocommit = 0;
    
    START TRANSACTION;
      UPDATE ...;

    …e la uso solo COMMIT; quando i risultati sono corretti.

    Che ha detto, UPDATE e DELETE in genere solo restituire il numero di righe interessate, non di dettagli specifici. La conversione a queste affermazioni istruzioni SELECT & esaminare i risultati di assicurare condizioni di correttezza prima per tentare l’istruzione UPDATE/DELETE.

    Addendum

    DDL (Data Definition Language) le dichiarazioni sono salvate automaticamente – non necessitano di un’istruzione COMMIT. ES: Tavolo, indici, stored procedure, database, e vista la creazione o la modifica di bilancio.

  3. 3

    Mi dispiace dirlo, ma non c’è modo di ripristinare i vecchi valori di campo senza un backup.

    Non sparare al messaggero…

    • Sparo la mia-auto

Lascia un commento