Rešitve napak

MySQL "Tabela je označena kot pokvarjena" napaka in popravilo tabel s phpMyAdmin

  • 14 min branja
  • Ekipa Hostragons
MySQL "Tabela je označena kot pokvarjena" napaka in popravilo tabel s phpMyAdmin

MySQL "Tabela je označena kot pokvarjena" napaka običajno pomeni, da je tabela, ki uporablja MyISAM shranjevalni motor, poškodovana in je ne more varno prebrati MySQL. Najhitrejša rešitev je, da po varnostnem kopiranju podatkov izberete ustrezno tabelo v phpMyAdminu in izvedete postopek Popravi tabelo. Vendar ta napaka ni vedno le opozorilo, ki ga lahko hitro odpravite; lahko se ponovi zaradi nenadnega izklopa strežnika, pomanjkanja prostora na disku, napačnih poizvedb, intenzivnega pisanja ali zastare nastavitev MySQL. V tem priročniku boste korak za korakom našli vzroke napake, varne korake popravila s phpMyAdminom, preverjanje varnostnega kopiranja pred postopkom in trajne metode preprečevanja.

Vaša spletna stran je lahko postavljena na WordPress, OpenCart, lastno PHP programsko opremo ali forum; ko tabela MySQL propade, vaši obiskovalci lahko vidijo belo stran, napako 500, časovno omejitev povezave ali nepričakovane napake v nadzorni plošči. Še posebej pri spletnih trgovinah lahko tudi nekaj minut prekinitve vpliva na izgubo dobička, če so prizadete tabele za naročila, izdelke, seje ali košarice. Zato je treba med popravilom zagotoviti tako varnost podatkov kot razumevanje osnovnega vzroka napake. Zanesljiva infrastruktura gostovanja, redno varnostno kopiranje in pravilna izbira shranjevalnega motorja znatno zmanjšujejo tovrstne tveganja. Na tej točki lahko razmislite o možnostih Hostragons spletno gostovanje za obvladljivo in nadzorovano infrastrukturo ali Hostragons VPS strežnik za projekte z visokimi zahtevami po virih.

Kaj je napaka "Tabela je označena kot pokvarjena"?

Napaka "Tabela je označena kot pokvarjena" pomeni, da je MySQL strežnik označil tabelo kot pokvarjeno in da so pri branju ali pisanju v to tabelo težave. Sporočilo o napaki se običajno pojavi v oblikah, kot so: Tabela './baza/tabela_ime' je označena kot pokvarjena in jo je treba popraviti ali Napačen ključni datoteka za tabelo. To sporočilo nakazuje na težave z datoteko tabele, indeksi ali celovitostjo tabele.

Ta napaka se najpogosteje pojavlja pri MyISAM tabelah. MyISAM je star in hitro bralni usmerjen shranjevalni motor; vendar njegova sposobnost za obnovitev po zrušitvi ni tako močna kot pri InnoDB. Če se strežnik nenadoma izklopi, se pisanje na disk prekine ali se storitev MySQL nenadoma konča, lahko MyISAM tabele zlahka propadejo. InnoDB je običajno bolj odporen zahvaljujoč mehanizmom za dnevnik transakcij in obnovo po zrušitvi; vendar to ne pomeni, da pri InnoDB tabelah ne more priti do težav. Težave pri InnoDB se običajno pojavijo kot težave s prostorom tabele, diskom, dnevnikom transakcij ali podatkovnim slovarjem.

Najpogostejši vzroki napake

Ko se tabela pokvari, se zdi, da je le popravilo s phpMyAdminom pogosto dovolj, vendar se lahko enaka težava ponovi v nekaj dneh ali urah, če ne najdete vzroka napake. Spodaj so navedeni najpogostejši scenariji, ki jih srečujemo na terenu:

  • Nenaden izklop strežnika: Če MySQL piše v tabelo med izpadi električne energije, ponovnim zagonom strojne opreme ali zrušitvijo operacijskega sistema, se tabela lahko pokvari.
  • Pomanjkanje prostora na disku: Če MySQL ne more zapisati začasnih datotek, indeksov ali posodobitev tabel, se lahko poškoduje celovitost podatkov. Tveganje se povečuje, ko disk uporablja več kot 90 % prostora.
  • Prisilno ustavljanje storitve MySQL: Ostro končanje, kot je kill -9, lahko povzroči težave, zlasti med intenzivnim pisanjem v MyISAM tabelah.
  • Intenzivni pisni promet: Tabele, ki se nenehno posodabljajo, kot so dnevniški, števec, seje ali iskalne tabele, so bolj občutljive, če uporabljajo MyISAM.
  • Napačni vtičniki ali teme: V sistemih, kot je WordPress, slabo napisani vtičniki lahko povzročijo prekomerne poizvedbe in zaklepanja tabel.
  • Težave s strojno opremo ali datotečnim sistemom: Slabi sektorji diska, napake I/O ali poškodovani datotečni sistemi lahko vplivajo na datoteke baze podatkov.
  • Stara različica MySQL: V neaktualnih različicah so lahko zmogljivost, zaklepanja in obnašanje obnovitve slabši.

Kritični varnostni koraki pred popravili

Postopek obnove baze podatkov je običajno varen; vendar vsak postopek, ki se izvede na pokvarjeni tabeli, ne odpravi popolnoma tveganja izgube podatkov. Zlasti v proizvodnem okolju, tj. če delate na aktivni spletni strani, mora biti prednost vedno varnostno kopiranje.

1. Opravite varnostno kopijo obstoječe baze podatkov

Pred začetkom popravila s phpMyAdminom izvozite trenutni varnostni kopiji baze podatkov. Pomembno je, da varnostno kopirate podatke, ki jih je mogoče prebrati, tudi če je tabela pokvarjena. V phpMyAdminu izberite bazo podatkov, kliknite na zavihek Izvozi, izberite po meri namesto hitrega načina, če je to mogoče, in opravite varnostno kopijo v formatu SQL. Pri velikih bazah podatkov lahko pride do časovne omejitve pri izvozu; v tem primeru je lahko orodje za varnostno kopiranje v kontrolni plošči gostovanja ali mysqldump preko SSH bolj zanesljivo. Pri projektih brez redne politike varnostnega kopiranja je koristno pregledati vire, kot so Rešitve za varnostno kopiranje gostovanja.

2. Določite, katera tabela je pokvarjena

V sporočilu o napaki je običajno navedeno ime tabele. Na primer, na WordPress strani se lahko pojavijo tabele wp_options, wp_posts, wp_comments ali wp_actionscheduler_actions. V lastnih programih se ime tabele pogosto vidi v dnevnikih aplikacije, dnevnikih napak PHP ali dnevniku napak MySQL. Določitev pokvarjene tabele preprečuje nepotrebne postopke na celotni bazi podatkov.

3. Kratko postavite spletno stran v režim vzdrževanja

Če med popravili pride do novih pisnih operacij v tabelo, lahko postopek ne uspe ali pa pride do neskladnosti podatkov. Kratek režim vzdrževanja 2-5 minut pri spletnih straneh z veliko prometa omogoča varnejše postopke. Če uporabljate WordPress, lahko s pomočjo vtičnika za vzdrževanje ustavite uporabniške operacije, ali pa, če uporabljate lastno programsko opremo, ustvarite začasno stran za vzdrževanje ali preusmeritev spletnega strežnika. Za varno uporabniško izkušnjo mora biti SSL aktiven na strani za vzdrževanje; če imate težave s certifikatom, lahko preučite možnosti SSL certifikat.

Kako popraviti MySQL tabelo s phpMyAdmin?

phpMyAdmin poenostavi popravilo MySQL tabel za uporabnike brez tehničnega znanja ukazne vrstice. Spodnji koraki so v splošnih cPanel, Plesk in podobnih nadzornih ploščah podobni.

Korak 1: Prijavite se v phpMyAdmin prek nadzorne plošče gostovanja

Po prijavi v nadzorno ploščo gostovanja odprite povezavo phpMyAdmin v razdelku baz podatkov. Če uporabljate več gostiteljskih računov ali domen, se prepričajte, da delate na pravem računu. Postopek na napačni bazi podatkov običajno ne povzroči neposredne škode; vendar pa to povzroči izgubo časa in vas lahko prisili, da popravljate testno okolje namesto žive strani. Če se vaši domenski in gostiteljski uskladi zmedejo, lahko preučite tudi temo Upravljanje domene.

Korak 2: Izberite pravilno bazo podatkov

Iz levega menija izberite bazo podatkov, ki jo uporablja vaša stran. Ime baze podatkov za WordPress lahko najdete v vrstici DB_NAME v datoteki wp-config.php. V lastnih PHP projektih je ime baze podatkov običajno v datotekah config.php, .env ali database.php. Ta kontrola je zelo pomembna, če na istem strežniku deluje več spletnih strani.

Korak 3: Označite pokvarjeno tabelo

Ko se baza podatkov odpre, se prikaže seznam tabel. Poiščite tabelo, ki je omenjena v sporočilu o napaki, in označite polje na njeni levi strani. Če prejmete isto napako za več tabel, lahko vse izberete; vendar je bolj nadzorovana metoda začeti z najpomembnejšo tabelo. Da vidite, ali je tabela MyISAM, preverite stolpec Tip ali Motor v vrstici.

Korak 4: Izvedite možnost Popravi tabelo

Po izbiri tabele izberite možnost Popravi tabelo v padajočem meniju na dnu strani. phpMyAdmin običajno izvede ukaz REPAIR TABLE tabela_ime v ozadju. Ko je postopek končan, boste videli uspešen, opozorilni ali neuspešen rezultat. Uspešen rezultat je običajno zapisan kot status OK. Pri velikih tabelah lahko postopek traja nekaj minut namesto nekaj sekund; v tem času ne osvežite strani in ne zapirajte brskalnika.

Korak 5: Preverite tabelo in testirajte spletno stran

Po končanem popravilu lahko iz istega padajočega menija izvedete postopek Preveri tabelo. Nato testirajte glavno stran vaše spletne strani, nadzorno ploščo, iskalno funkcijo, sezname izdelkov in področje prijave uporabnikov. Če uporabljate WordPress, je dobra praksa shraniti trajne povezave, očistiti predpomnilnik in preveriti dnevnik napak v nadzorni plošči.

Kaj pomenijo možnosti popravila v phpMyAdmin?

V phpMyAdminu so na voljo različne možnosti za vzdrževanje tabel, ne le popravila. Namen vsake možnosti je drugačen in jih ne smete uporabljati s praznimi pričakovanji.

Kaj pomenijo možnosti popravila v phpMyAdmin?
MožnostKaj počne?Kdaj se uporablja?
Preveri tabeloPreveri strukturno celovitost tabele in stanje napake.Uporablja se za preverjanje pred in po popravilu.
Popravi tabeloPoskuša popraviti poškodovane MyISAM tabele in indekse.Prvi varen korak, ko se pojavi napaka "Tabela je označena kot pokvarjena".
Optimiziraj tabeloZmanjša praznine, ki jih puščajo izbrisani vnosi, in ureja tabelo.Uporablja se za izboljšanje zmogljivosti po intenzivnem brisanju/posodabljanju.
Analiziraj tabeloPosodablja statistiko indeksov za načrtovalnika poizvedb.Izbira se, kadar sumite na upad zmogljivosti ali nepravilno uporabo indeksov.

Na kratko, napaka "Tabela je označena kot pokvarjena" zahteva, da se izvede postopek Popravi tabelo. Optimizacija in analiza sta koristna orodja za vzdrževanje, vendar ne moreta sama rešiti poškodovane tabele.

Zakaj je stanje pri InnoDB tabelah drugačno?

V phpMyAdminu možnost Popravi tabelo za InnoDB tabele ne deluje vedno, kot bi pričakovali. Razlog je, da InnoDB ne deluje na preprostem načelu popravila datotek, kot to počne MyISAM. InnoDB ohranja celovitost podatkov z dnevnikom transakcij, redo dnevnikom, undo dnevnikom in strukturo prostora tabele. Zato je rešitev za težave z InnoDB običajno pregledovanje dnevnikov storitev MySQL, preverjanje stanja diska, vrnitev na varnostno kopijo ali uporaba naprednih načinov obnove.

Če vaše sporočilo o napaki kaže na MyISAM tabelo, bo popravilo v phpMyAdminu verjetno uspešno. Vendar, če dobivate sporočila, kot so pokvarjeno, tablespace, ni mogoče odpreti tabele pri InnoDB, se je pred poskusi popravila bolje najprej varnostno kopirati in pregledati strežniške dnevnike. V tem primeru je pametno poiskati pomoč pri svojem ponudniku gostovanja. Zlasti pri kritičnih podatkih e-trgovine je bolje, da se izognete naključnim poskusom in raje posežete po strokovni pomoči.

Kaj storiti, če popravilo ne uspe?

Postopek popravila tabele s phpMyAdminom ni vedno uspešen. Velikost tabele, resna poškodba datotek, težave z diskom ali omejitve dostopa lahko povzročijo prekinitev postopka. V takem primeru lahko sledite naslednjim korakom:

  • Obnova iz varnostne kopije: Najbolj zanesljiv način je obnovitev najnovejše varnostne kopije, ki je bila narejena pred napako. Pred obnovitvijo shranite trenutno poškodovano bazo podatkov kot ločeno datoteko.
  • Uporaba myisamchk prek SSH: Za MyISAM tabele, če imate dostop do strežnika, lahko uporabite orodje myisamchk. Ta postopek je treba izvesti, ko je storitev MySQL ustavljena ali ko je dostop do tabele prekinjen.
  • Ukaz REPAIR TABLE: Ukaz REPAIR TABLE tabela_ime; se lahko izvede iz SQL zavihka phpMyAdmin. Za obsežne tabele lahko razmislite o možnostih QUICK ali EXTENDED.
  • Preverjanje diska in inode: Če je prostor na disku ali inode poln, bo popravilo neuspešno. Najprej je treba odstraniti nepotrebne varnostne kopije, dnevnike in začasne datoteke.
  • Pregled strežniških dnevnikov napak: Dnevnik napak MySQL, dnevnik spletnega strežnika in dnevnik napak PHP zagotavljajo kritične podatke za določitev osnovnega vzroka.

Če uporabljate skupno gostovanje, morda ne boste imeli dostopa do SSH ali možnosti ustavitve storitve. V tem primeru posredovanje napake, imena tabele, približnega časa nastanka in datuma zadnje varnostne kopije podporni ekipi pospeši iskanje rešitve.

Kako preprečiti ponovitev napake?

Enkratno popravilo le začasno odpravi težavo; trajna rešitev pa je infrastruktura in disciplina vzdrževanja. Spodnje zaščitne ukrepe jasno zmanjšujejo tveganje za poškodbo tabele MySQL.

Razmislite o pretvorbi MyISAM tabel v InnoDB

V sodobnih spletnih aplikacijah je InnoDB običajno varnejša in bolj odporna izbira. Zaradi zaklepanja na ravni vrstic, podpore transakcijam in lastnosti obnovitve po zrušitvi ponuja prednost pred MyISAM pri intenzivnem pisanju. Postopek pretvorbe se lahko izvede preprosto z ukazom ALTER TABLE tabela_ime ENGINE=InnoDB; vendar ga je treba najprej preizkusiti v testnem okolju in opraviti popolno varnostno kopijo, preden ga uporabite na živi spletni strani. Nekateri starejši programi so lahko odvisni od fulltext indeksov ali posebnega vedenja MyISAM.

Uporabite redno in obnovljivo varnostno kopiranje

Varnostno kopiranje je dragoceno le, če je mogoče obnoviti. Dnevna varnostna kopiranja, tedenska popolna varnostna kopiranja in ročna varnostna kopiranja pred pomembnimi posodobitvami so dobra politika. Shranjevanje vsaj 7-dnevnih varnostnih kopij je razumen začetek za večino majhnih in srednje velikih spletnih strani. Pri spletnih trgovinah je morda potrebna pogostejša varnostna kopija ali okrevanje na osnovi binlog, da se zmanjša izguba naročil.

Opazujte uporabo diska in virov

Ko prostor na disku doseže 85-90 %, je treba sprožiti alarm. MySQL potrebuje prost prostor za začasne tabele, datoteke dnevnikov in operacije indeksov. Poleg tega je treba redno spremljati CPU, RAM in čakalne čase I/O. Spletna stran, ki nenehno naleti na omejitve virov, je bolj nagnjena k napakam v bazi podatkov. Če se vaš promet povečuje, je smiselno preiti na močnejši paket kot je deljeno gostovanje; v zvezi s tem lahko preučite strani Korporativno gostovanje ali Gostovanje z visoko uspešnostjo.

Preverite posodobitve vtičnikov, tem in programske opreme

Starejša programska oprema ne povzroča le varnostnih lukenj; lahko pošilja tudi neučinkovite poizvedbe v bazo podatkov. Med vzdrževanjem WordPressa je treba odstraniti neuporabljene vtičnike, očistiti tabele dnevnikov, ki povečujejo bazo podatkov, in se izogibati nezanesljivim vtičnikom. Pred posodobitvijo programske opreme je priporočljivo izvesti testiranje v staging okolju, da se preprečijo nepričakovane težave s tabelami ali indeksi na živi spletni strani.

Strežnik pravilno izklopite in pripravite načrt vzdrževanja

Če upravljate VPS ali namenski strežnik, se izogibajte prisilnemu ustavljanju storitve MySQL. Pred vzdrževanjem je pomembno, da storitve ustavite kontrolirano, posodobitve izvajate ob nizki prometa in preverite dnevnike po ponovnem zagonu. Načrtovana disciplina vzdrževanja znatno zmanjšuje tveganje za poškodbe pri bazah podatkov z visokim prometom.

Posebna obvestila za WordPress strani

WordPress pogosto prikazuje napake MySQL z splošnim sporočilom Pri vzpostavljanju povezave z bazo podatkov je prišlo do napake. Vendar pa lahko ob pregledu dnevnika napak opazite podrobnosti o poškodovani tabeli. Med tabelami, ki so pogosto prizadete na WordPressu, so wp_options, wp_posts, wp_postmeta, wp_comments in nekatere tabele dnevnikov ali načrtovalnikov, ki jih ustvari vtičnik. Če se tabela wp_options pokvari, morda ne boste mogli prebrati splošnih nastavitev strani; če se pokvari tabela wp_posts, vsebine morda ne bodo prikazane; če se poškodujejo dnevniške tabele vtičnikov, lahko pride do upočasnitev nadzorne plošče.

WordPress ima tudi vgrajeno funkcijo za popravilo baze podatkov. V datoteko wp-config.php lahko začasno dodate vrstico define('WP_ALLOW_REPAIR', true); in izvedete popravilo na naslovu /wp-admin/maint/repair.php. Vendar pa je to vrstico treba nujno odstraniti po končanem postopku; sicer bo stran za popravilo ostala odprta za nepooblaščen dostop. Metoda phpMyAdmin je običajno bolj nadzorovana, saj lahko neposredno vidite, katero tabelo obdelujete. Če iščete optimizirano infrastrukturo za WordPress projekte, lahko preučite vir WordPress gostovanje.

Kdaj poiskati strokovno pomoč?

Vsaka napaka MySQL ni dovolj preprosta, da bi jo rešili sami. Če se pojavi katera od spodnjih situacij, je bolj smiselno poiskati strokovno pomoč:

  • Pokvarjena tabela vsebuje podatke o naročilu, plačilu, članstvu ali financah.
  • Napaka se nadaljuje po poskusu popravila ali pa tabela izgleda kot da je izgubljena.
  • Velikost baze podatkov presega nekaj GB in phpMyAdmin se zatakne.
  • Opazite napake v InnoDB tablespace ali redo dnevniku.
  • Obstajajo napake diska, napake I/O ali opozorila o datotečnem sistemu.
  • Nimate sveže varnostne kopije.

Ko ustvarjate zahtevek za podporo, delite celotno besedilo sporočila o napaki, ime prizadete baze podatkov in tabele, čas, ko se je napaka pojavila, zadnjo posodobitev ali prenos ter datum varnostne kopije, če obstaja. Te informacije znatno skrajšajo čas rešitve.

Hitri kontrolni seznam

Za hitro ukrepanje v nujnih primerih lahko sledite tej vrstnem redu:

  • Določite ime pokvarjene tabele iz sporočila o napaki.
  • Opravite varnostno kopijo obstoječe baze podatkov.
  • Postavite spletno stran v kratek vzdrževalni način.
  • Izberite pravilno bazo podatkov v phpMyAdminu.
  • Označite ustrezno tabelo in izvedite postopek Popravi tabelo.
  • Preverite tabelo in testirajte funkcionalnosti spletne strani.
  • Zmanjšajte tveganje z preverjanjem diska, virov, varnostnih kopij in motorja tabel.

Pogosto zastavljena vprašanja

Ali napaka MySQL "Tabela je označena kot pokvarjena" pomeni izgubo podatkov?

Ne pomeni vedno izgube podatkov. Večina MyISAM tabel se lahko obnovi s postopkom Popravi tabelo v phpMyAdmin. Vendar, če je tabela resno poškodovana, so lahko nekateri zapisi izgubljeni. Zato je pomembno, da pred popravili opravite varnostno kopijo trenutnega stanja.

Ali je postopek popravila s phpMyAdmin varno?

Na splošno je varen; vendar vsak vzdrževalni postopek, ki se izvede na živi bazi podatkov, prinaša tveganja. Opravljanje varnostne kopije pred postopkom, izbira prave tabele in, če je mogoče, preklop na način vzdrževanja povečuje varnost. Pri velikih ali kritičnih tabelah je priporočljivo poiskati strokovno pomoč.

Ali naj uporabim Popravi tabelo za InnoDB tabele?

InnoDB tabele se ne popravijo na klasičen način, kot to počne MyISAM. Pri težavah z InnoDB je bolj pravilno preučiti dnevnike MySQL, preveriti stanje diska in, če je potrebno, obnoviti iz varnostne kopije. Naključni poskusi popravila lahko povečajo tveganje izgube podatkov.

Zakaj se ta napaka nenehno ponavlja?

Če se napaka ponavlja, so lahko osnovni vzroki še vedno neodpravljeni. Pomanjkanje prostora na disku, nenadni izklopi storitev, intenziven pisni promet, poškodovani vtičniki, zastarele različice MySQL ali nadaljnja uporaba MyISAM so najpogostejši vzroki. Določitev osnovnega vzroka je ključna za trajno rešitev.

Ali naj se obrnem na svojo gostiteljsko podjetje pred popravkom?

Pri preprostih MyISAM napakah lahko opravite varnostno kopijo in poskusite popravilo s phpMyAdmin. Vendar, če tabela vsebuje kritične podatke, če nimate varnostne kopije, če je baza podatkov zelo velika ali če opazite napake v InnoDB, je priporočljivo, da se obrnete na podporno ekipo gostitelja.

Zaključek

MySQL "Tabela je označena kot pokvarjena" napaka je opozorilo o poškodbi baze podatkov, ki se najpogosteje pojavlja pri MyISAM tabelah in ga večinoma lahko odpravimo s phpMyAdmin. Pravi pristop je najprej opraviti varnostno kopijo, določiti pokvarjeno tabelo, izvesti popravilo preko phpMyAdmin in nato odpraviti vzrok napake. Redno varnostno kopiranje, zadostni strežniški viri, uporaba InnoDB in posodobljena programska oprema zmanjšujejo možnosti ponovnega pojava te težave. Če se vaši spletni strani pogosto pojavljajo podobne napake, razmislite o pregledu svoje infrastrukture in raziskovanju gostovalnih rešitev, ki ustrezajo vašim potrebam, lahko pa tudi preučite vire Hostragons ali zahtevate usmeritev od njihove podporne ekipe.

Delite to objavo:

Ekipa Hostragons

Aktualni vodniki naše strokovne ekipe o gostovanju, strežnikih in domenskih imenih. Skupaj poiščimo pravo rešitev za vaš projekt.

Kontaktirajte nas