Atkurti po neteisingo „MySQL“ atnaujinimo užklausos?

Lentelėje padariau klaidingą atnaujinimo prašymą.

Pamiršau sukurti ID lauką WHERE .

Taigi atnaujinkite visas mano eilutes.

Kaip ją atkurti?

Neturėjau atsarginės kopijos.

10
31 янв. assaqqaf nustatė sausio 31 d 2010-01-31 22:43 '10, 22:43, 2010-01-31 22:43
@ 4 atsakymai

Atsiprašome, bet tikimybė atkurti perrašytą „ MySQL“ duomenų bazę paprastai yra artima nuliui. Skirtingai nei failo ištrynimas, įrašo perrašymas iš tikrųjų ir fiziškai perrašo esamus duomenis daugeliu atvejų.

Jei būsite pasiruošę, jei kas nors pasirodys čia, turite sustabdyti „MySQL“ serverį ir padaryti fizinio katalogo, kuriame yra duomenų bazė, kopiją, kad nieko nebūtų galima perrašyti toliau: reikia atlikti paprastą kopiją + duomenų aplanko įterpimą į kitą vietą.

Bet nepamirškite vilties - manau, kad nieko negalima padaryti.

Ateityje galbūt norėsite sukurti dažną duomenų bazės atsarginę kopiją. Yra daug sprendimų; vienas iš paprasčiausių, patikimiausių ir paprasčiausių automatizuoti (naudojant at Linux at ar „ cron “ sistemoje „Windows“) yra „MySQL“ raundai .

10
31 янв. atsakymas duotas Pekka jan 31 d. 2010-01-31 22:48 '10, 22:48, 2010-01-31 22:48

Čia galite užimti dvi pamokas:

  • Atsarginiai duomenys
  • Atlikite UPDATE / DELETE pareiškimus operacijoje, kad galėtumėte naudoti ROLLBACK jei viskas nėra taip, kaip planuota.

Transakcinis informuotumas (automatinis, aiškus ir netiesioginis) duomenų bazės apdorojimas gali padėti jums atkurti duomenis iš atsarginės kopijos.

Sandorių valdymo operacijos (sandoriai), siekiant užtikrinti, kad jos būtų atominės. Atominė reiškia, kad sandoris vyksta arba ne. Vienintelis būdas pranešti apie duomenų bazės įvykdymą yra naudoti COMMIT arba ROLLBACK pareiškimą (ANSI-92, kurioje, deja, nėra sintaksės kuriant / pradedant operaciją, todėl jis yra pardavėjo specifinis). COMMIT taiko sandoriui padarytus pakeitimus (jei yra). ROLLBACK ignoruoja bet kokius veiksmus, kurie įvyksta operacijoje - labai pageidautina, kai UPDATE / DELETE pareiškimas daro kažką netyčinio .

Paprastai individualūs DML sandoriai (Įterpti, Atnaujinti, Trinti) vykdomi automatinio įsipareigojimo operacijoje - jie yra įvykdyti, kai tik sėkmingai užbaigiamas pareiškimas. Tai reiškia, kad duomenų bazę negalima grąžinti į valstybę, kol operatorius nebuvo pradėtas tokiais atvejais kaip jūsų. Kai kažkas negerai, vienintelė atkūrimo galimybė yra atkurti duomenis iš atsarginės kopijos (jei ji yra). „MySQL “ automatinis įsipareigojimas yra numatytasis „InnoDB“ - „MyISAM“ nepalaiko sandorių. Jis gali būti išjungtas naudojant:

 SET autocommit = 0 

Aiškus sandoris yra tada, kai operatorius yra supakuotas į aiškiai apibrėžtą sandorio kodo bloką - „MySQL“, „ START TRANSACTION . Jis taip pat reikalauja, kad sandorio pabaigoje būtų aiškiai sukurtas COMMIT arba ROLLBACK . Įdėtos operacijos nepatenka į šios temos taikymo sritį.

Netiesioginiai sandoriai šiek tiek skiriasi nuo aiškių sandorių. Netiesioginiai sandoriai nereikalauja sandorio paaiškinimo. Tačiau, kaip ir aiškūs sandoriai, jiems reikia COMMIT arba ROLLBACK .

Išvada

Aiškiausi sandoriai yra idealiausias sprendimas - sandoris turi būti COMMIT arba ROLLBACK , o tai, kas vyksta, yra aiškiai nurodyta kitiems, jei reikia. Netiesioginiai sandoriai yra gerai, jei dirbate su duomenų baze internete, tačiau COMMIT pareiškimai turėtų būti nurodyti tik tada, kai rezultatai bus išbandyti ir kruopščiai nustatyti kaip galiojantys.

Tai reiškia, kad turėtumėte naudoti:

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

... ir naudokite tik COMMIT; kai rezultatai yra teisingi.

Tačiau UPDATE ir DELETE pareiškimai paprastai grąžina tik paveiktų eilučių skaičių, o ne konkrečius duomenis. Konvertuokite tokias išraiškas į SELECT ir peržiūrėkite rezultatus, kad įsitikintumėte, jog norite atlikti UPDATE / DELETE pareiškimą.

Pridėti

DDL (Duomenų apibrėžimo kalba) teiginiai automatiškai nustatomi - jiems nereikia COMMIT instrukcijos. IE: lentelė, indeksas, saugoma procedūra, duomenų bazė ir peržiūros arba keitimo pareiškimai.

13
01 февр. Atsakymas pateikiamas OMG Ponies 01 vasario 1 d. 2010-02-01 01:16 '10 ne 1:16 2010-02-01 01:16

Deja, tai nėra, bet neįmanoma atkurti senų lauko reikšmių be atsarginės kopijos.

Negalima šaudyti pasiuntinio ...

3
31 янв. atsakymas duotas Dan Soap sausio 31 d 2010-01-31 22:46 „10, 10:46 PM 2010-01-31 22:46

Ar turite binlogs? Galite atkurti prieigą prie „binlogs“.

0
08 окт. atsakymą pateikė user3299633 08 oct. 2016-10-08 06:56 '16 at 6:56 2016-10-08 06:56

Peržiūrėkite kitus klausimus apie žymes arba Užduokite klausimą