Jei kada nors gilinotės į fiziką ir ypač į kvantinę mechaniką, tikriausiai girdėjote apie keistą reiškinį pavadintą Šredingerio paradoksu arba Šredingerio kate. Trumpai tariant, Šredingerio katė yra minties eksperimentas, kurį 1935 m. atliko austrų-airių fizikas Erwinas Šredingeris diskusijoje su Albertu Einšteinu: eksperimentas iliustruoja hipotetinę katę, kuri vienu metu gali būti laikoma ir gyva ir mirusia.
Kaip jau minėta aukščiau, Šredingerio paradoksas iliustruoja kažką, kas tuo pačiu metu gali būti laikoma gyvu ir mirusiu objektu, todėl gali kilti klausimas, kaip šis eksperimentas yra susijęs su MySQL? Viskas yra gana paprasta: tokia problema gali atsirasti po to, kai viduryje MySQL atliekamų operacijų nutrūksta maitinimas: pavyzdžiui, taip gali atsitikti tada, kai į duomenų bazę yra importuojami duomenys ir importavimo procesas nepasibaigia todėl, nes dingsta elektra ar internetas. ACID savybės čia gali padėti, tačiau gali ir nebūti ypač naudingos. ACID savybės skirtos garantuoti duomenų vientisumą nepaisant maitinimo sutrikimų ir kitų problemų, tačiau jei po nepavykusios operacijos su MySQL atliekate tam tikras kitas operacijas, gali būti, kad problema visai ne ACID. Tikriausiai čia jūs susidūrėte su šiek tiek kitokia problema: Šredingerio paradoksu MySQL.
Norėdami įsitikinti, kad susidūrėte su Šredingerio paradoksu MySQL, atlikite šiuos veiksmus:
SHOW TABLES;
užklausą Jūsų MySQL serveryje ir paieškokite lentelės – jos neturėtų būti sąraše.CREATE TABLE
užklausa. MySQL turėtų pateikti klaidą, kad lentelė jau egzistuoja:ERROR 1050 (42S01): Table 'demo_table' already exists
DROP TABLE
užklausą. MySQL turėtų pateikti klaidą, kad tokios lentelės nėra:ERROR 1146 (42S02): Table 'demo_table' doesn't exist
Jei lentelės sukurti negalite, lentelės ištrinti nepavyksta, bet Jūs matote su lentele asocijuotus failus /var/lib/mysql
direktorijoje, tikriausiai susidūrėte su Šredingerio lentele MySQL.
Taip gali būti todėl, kad duomenų direktorijoje nėra duomenų failo, bet lentelės formatas (dar vadinamas apibrėžimu) – .frm
failas – egzistuoja arba atvirkščiai. Trumpai tariant, atrodo, kad InnoDB vis dar turi tokios lentelės įrašą ibdata1
faile.
Dabar turėtumėte būti įsitikinę, kad susidūrėte su Šredingerio paradoksu – lentele – MySQL, ir laikas jos atsikratyti. Norėdami tai padaryti, atlikite šiuos veiksmus:
.frm
failą į duomenų bazės katalogą serveryje, kuriame egzistuoja Šredingerio lentelė. Įsitikinkite, kad failo nuosavybės teisės ir leidimai yra tokie, kokių reikia.SHOW TABLES
užklausą: lentelių sąraše turėtumėte pamatyti ir Šredingerio lentelę. Dabar visos operacijos turėtų veikti korektiškai (t.y lentelę turėtų būti galima ištrinti).Turėkite omenyje, kad ištrinti kataloge esančių .ibd
failų nepavyks, nes MySQL papraščiausiai juos atkurs.
Yra ir kitas būdas išspręsti šią problemą (prieš atlikdami šiuos veiksmus įsitikinkite, kad turite savo duomenų atsargines kopijas):
mysql
.ibdata1
ir ib_logfile*
failus.ibdata1
ir ib_logfile*
failų turiniai turėtų būti atstatyti.Norėdami įsitikinti, kad nesusidurtumėte su Šredingerio paradoksu ateityje, įsitikinkite, kad viduryje MySQL vykdomų operacijų nenutrūktų maitinimas.
Susidurimas su Šredingerio lentelėmis MySQL ekosistemoje gali būti tikrai varginanti problema. Paprastai šią problemą sukelia maitinimo nutraukimas, kai MySQL vykdo tam tikras operacijas – tokių būdu duomenų kataloge pritrūksta duomenų failo, tačiau lentelės apibrėžimo – .frm
– failai egzistuoja arba atvirkščiai. Laimei, šias problemas yra gana lengva išspręsti ir išvengti jų pasikartojimo.
There have been rumors about a data breach targeting Schneider Electric. Did a data breach…
There have been rumors about the Fiskars Group – the company behind Fiskars scissors and…
Russia has fined Google more than two undecillion roubles because Google has refused to pay…
Why does RockYou 2024.txt look like a binary file when you open it up? Find…
Duolicious is a dating app that connects people who are “chronically online.” Did the Duolicious…
This blog will tell you what RockYou 2024 is, how RockYou 2024.txt came to be,…