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 existsDROP TABLE užklausą. MySQL turėtų pateikti klaidą, kad tokios lentelės nėra:ERROR 1146 (42S02): Table 'demo_table' doesn't existJei 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.
5 Covert skins can now be exchanged for knives or gloves using the CS2 trade…
This blog will walk you through ways to overcome database corruption which can be the…
How to protect your identity and data amidst many OnlyFans leaks? Learn here.
This blog will walk you through ways to analyse database systems using SQL. Tune in.
What are the best movies on Netflix is a question asked by many movie aficionados.…
Here’s how to master the handling of NULL values without using the COALESCE SQL clause.