Řešení chyb

MySQL „Tabulka je označena jako poškozená“ – jak opravit tabulku přes phpMyAdmin

  • 12 min čtení
  • Tým Hostragons
MySQL „Tabulka je označena jako poškozená“ – jak opravit tabulku přes phpMyAdmin

Chyba MySQL „Tabulka je označena jako poškozená“ obvykle značí, že tabulka používající úložiště MyISAM je poškozená a MySQL ji nedokáže bezpečně číst. Nejrychlejší řešení je po záloze databáze vybrat danou tabulku v phpMyAdmin a spustit Opravit tabulku. Tato chyba však nemusí být vždy pouze drobným varováním, které vyřešíte jedním kliknutím; může ji způsobit náhlé vypnutí serveru, plný disk, chybné dotazy, vysoký zápisový provoz nebo zastaralé konfigurace MySQL a může se opakovat. V tomto průvodci najdete příčiny chyby, bezpečné kroky opravy přes phpMyAdmin, kontrolu zálohy před opravou i možnosti, jak podobným problémům předejít.

Vaše webové stránky mohou být postaveny na WordPressu, OpenCartu, vlastním PHP řešení nebo například na fóru; poškozená MySQL tabulka však může způsobit bílé stránky, chybu 500, timeout připojení či neočekávané chyby v administračním panelu. Zvlášť u e-shopů, kdy jsou poškozeny tabulky objednávek, produktů, relací nebo košíku, může i několik minut výpadku znamenat ztrátu tržeb. Proto je při opravě důležité nejen data zachovat, ale také pochopit kořen problému. Spolehlivá hostingová infrastruktura, pravidelné zálohování a správný výběr databázového enginu výrazně snižují rizika. Pro snadnou správu a monitoring doporučujeme Hostragons webhosting, pro projekty s vyššími nároky zase Hostragons VPS server.

Co znamená chyba „Tabulka je označena jako poškozená“?

Chyba „Tabulka je označena jako poškozená“ znamená, že MySQL server vyhodnotil tabulku jako poškozenou a při čtení či zápisu do ní dochází k problémům. Obvykle se zobrazí zprávy jako: Table './databaze/nazev_tabulky' is marked as crashed and should be repaired nebo Incorrect key file for table. Tyto hlášky signalizují problém se soubory tabulky, indexy nebo její integritou.

Nejčastěji se problém týká MyISAM tabulek. MyISAM je starší, rychle orientovaný na čtení, ale nemá tak silné mechanismy pro zotavení po havárii jako InnoDB. Pokud server neočekávaně spadne, zápis na disk se přeruší nebo MySQL služba není korektně ukončena, MyISAM tabulky se snadno poškodí. InnoDB má díky transakčním logům a crash recovery větší odolnost, ale i zde se mohou vyskytnout problémy, které se projeví chybami typu corrupt tablespace či nemožností otevřít tabulku.

Nejčastější příčiny chyby

I když oprava přes phpMyAdmin často problém dočasně vyřeší, pokud neodhalíte příčinu, může se chyba vracet. Mezi nejčastější příčiny patří:

  • Náhlé vypnutí serveru: Výpadek elektřiny, restart hardware nebo pád operačního systému během zápisu do databáze může tabulku poškodit.
  • Plný disk: Pokud MySQL nemůže zapsat do dočasných souborů, indexů nebo tabulek kvůli nedostatku místa, může dojít k poškození dat. Disk by nikdy neměl být zaplněn nad 90 % kapacity.
  • Vynucené ukončení MySQL služby: Příkaz kill -9 nebo podobné násilné ukončení během zápisu způsobuje problémy zejména u MyISAM tabulek.
  • Vysoký zápisový provoz: Tabulky jako logy, počitadla, relace nebo vyhledávání, které se často aktualizují a používají MyISAM, jsou náchylnější k poškození.
  • Chybné pluginy nebo šablony: Ve WordPressu či jiných systémech může nekvalitní plugin způsobovat nadměrné a špatně navržené dotazy, které způsobují zablokování tabulek.
  • Problémy s hardwarem nebo souborovým systémem: Vadné sektory disku, chyby I/O nebo poškozený souborový systém mohou poškodit databázové soubory.
  • Zastaralá verze MySQL: Starší verze mohou mít horší výkon, nestabilitu a slabší mechanismy obnovy po havárii.

Kritické kroky před opravou tabulky

Oprava databáze je většinou bezpečná, ale jakýkoliv zásah do poškozené tabulky může nést riziko ztráty dat. Zejména na produkčním webu je proto vždy prioritou mít aktuální zálohu.

1. Pořiďte aktuální zálohu databáze

Než začnete s opravou v phpMyAdmin, exportujte aktuální stav databáze. I když je tabulka poškozená, lze často načíst část dat. V phpMyAdmin vyberte databázi, klikněte na záložku Export, zvolte možnost „vlastní“ místo „rychlý“ a exportujte ve formátu SQL. U velkých databází může export přes phpMyAdmin časově selhávat, proto je vhodné použít nástroje hostingu nebo příkaz mysqldump přes SSH. Pokud nemáte zavedenou pravidelnou zálohovací politiku, doporučujeme se seznámit s Řešení zálohování hostingu.

2. Identifikujte poškozenou tabulku

Chybová zpráva obvykle obsahuje název tabulky. U WordPressu to mohou být tabulky jako wp_options, wp_posts, wp_comments nebo například wp_actionscheduler_actions. U vlastních řešení najdete název v aplikačních logech, PHP error logu nebo MySQL error logu. Znát přesně poškozenou tabulku zabrání zbytečným zásahům do ostatních dat.

3. Nastavte web do režimu údržby

Pokud během opravy dochází k novým zápisům do tabulky, může být oprava neúplná nebo může dojít k nekonzistenci dat. Na frekventovaných webech je vhodné aktivovat údržbový režim na 2–5 minut. Ve WordPressu lze použít plugin pro údržbu, u vlastních řešení ideálně nasadit dočasnou statickou stránku nebo přesměrování na údržbový režim přímo na webovém serveru. Pro bezpečný zážitek návštěvníků by údržbová stránka měla mít aktivní SSL certifikát; pokud máte s certifikáty potíže, doporučujeme nahlédnout do SSL certifikát.

Jak opravit MySQL tabulku pomocí phpMyAdmin?

phpMyAdmin usnadňuje opravu tabulek i uživatelům bez hlubokých znalostí příkazové řádky MySQL. Níže uvedené kroky jsou obdobné v běžných hostingových panelech jako cPanel nebo Plesk.

Krok 1: Přihlaste se do phpMyAdmin přes hostingový panel

Přihlašte se do svého hostingového ovládacího panelu a v sekci databází spusťte phpMyAdmin. Pokud máte více hostingových účtů nebo domén, ujistěte se, že pracujete s tou správnou databází. Nesprávná databáze obvykle nezpůsobí přímou škodu, ale zbytečně ztratíte čas a oprava se nebude týkat produkčního webu. Pokud máte nejasnosti ohledně párování domén a databází, podívejte se na Správa domény.

Krok 2: Vyberte správnou databázi

V levém menu vyberte databázi, kterou váš web používá. Název databáze zjistíte například ve WordPressu v souboru wp-config.php pod řádkem DB_NAME. U vlastních PHP projektů bývá název uveden v konfiguračních souborech jako config.php, .env nebo database.php. Pokud na stejném serveru běží více webů, je důležité zkontrolovat správnost výběru.

Krok 3: Označte poškozenou tabulku

Zobrazí se seznam tabulek databáze. Najděte tabulku uvedenou v chybové zprávě a zaškrtněte políčko vlevo. Pokud je poškozených tabulek více, můžete je označit najednou, ale doporučujeme začít nejkritičtější. Typ tabulky (např. MyISAM) zjistíte ve sloupci Typ nebo Engine.

Krok 4: Spusťte opravu tabulky

Po označení tabulky vyberte v dolní části stránky z rozbalovací nabídky možnost Opravit tabulku. phpMyAdmin ve skutečnosti spustí příkaz REPAIR TABLE nazev_tabulky. Po dokončení uvidíte zprávu o úspěchu, varování nebo neúspěchu. Úspěch bývá označen jako status OK. U větších tabulek může oprava trvat i několik minut, během ní stránku neobnovujte ani nevypínejte prohlížeč.

Krok 5: Zkontrolujte tabulku a otestujte web

Po opravě můžete ze stejného menu spustit Zkontrolovat tabulku, čímž ověříte její stav. Poté otestujte hlavní stránky webu, administrační rozhraní, vyhledávání, výpis produktů či přihlášení uživatelů. Ve WordPressu je dobré uložit trvalé odkazy, vyčistit cache a zkontrolovat chybové logy.

Co znamenají další možnosti opravy v phpMyAdmin?

PhpMyAdmin nabízí kromě opravy také další nástroje pro údržbu tabulek. Je důležité je správně používat, protože každý slouží k jinému účelu:

Co znamenají další možnosti opravy v phpMyAdmin?
MožnostFunkceKdy použít
Zkontrolovat tabulkuOvěří integritu tabulky a hledá chyby.Před a po opravě pro kontrolu stavu.
Opravit tabulkuPokouší se opravit poškozené MyISAM tabulky a indexy.První krok při chybě „Table is marked as crashed“.
Optimalizovat tabulkuZmenší prázdné mezery po smazaných řádcích a zlepší výkon.Po intenzivních aktualizacích nebo mazání dat.
Analyzovat tabulkuAktualizuje statistiky indexů pro optimalizaci dotazů.Při podezření na pomalý výkon nebo chybné indexy.

Pro chybu „Tabulka je označena jako poškozená“ je klíčová volba Opravit tabulku. Optimalizace a analýzy jsou užitečné pro běžnou údržbu, ale samy o sobě poškozenou tabulku neopraví.

Proč je situace u InnoDB tabulek jiná?

U InnoDB tabulek nemusí volba Opravit tabulku v phpMyAdmin vždy fungovat, protože InnoDB nepracuje na principu jednoduché opravy souborů jako MyISAM. InnoDB využívá transakční logy, redo a undo logy a složité mechanismy, které zachovávají integritu dat. Proto řešení problémů s InnoDB obvykle znamená prohlédnout si logy MySQL, zkontrolovat stav disku, obnovit data ze zálohy nebo použít pokročilé režimy obnovy.

Pokud se chyba týká MyISAM tabulky, oprava přes phpMyAdmin má vysokou šanci na úspěch. U chyb jako corrupt, tablespace nebo cannot open table u InnoDB byste měli nejdříve udělat zálohu a pečlivě prozkoumat logy. V takovém případě je vhodné obrátit se na hostingovou podporu. Zvlášť u kritických dat e-shopů je lepší vyhnout se náhodným pokusům a spolehnout se na odborníky.

Co dělat, když oprava selže?

Oprava přes phpMyAdmin nemusí být vždy úspěšná, zejména při velkých tabulkách, vážném poškození souborů, problémech s diskem nebo nedostatku oprávnění. V takovém případě pomohou tyto postupy:

  • Obnovení ze zálohy: Nejbezpečnější cesta je obnovit databázi ze známé funkční zálohy. Původní poškozenou databázi si uložte jako zálohu pro případnou pozdější analýzu.
  • Myisamchk přes SSH: Pokud máte přístup k serveru, můžete použít nástroj myisamchk ke kontrole a opravě MyISAM tabulek. Je nutné zastavit MySQL službu nebo zajistit, aby tabulka nebyla používána.
  • Příkaz REPAIR TABLE v SQL: Pomocí SQL příkazu REPAIR TABLE nazev_tabulky; můžete zkusit opravu přímo v phpMyAdmin v záložce SQL. Pro velké tabulky lze zvolit parametry QUICK nebo EXTENDED.
  • Kontrola disku a inode: Pokud je disk nebo počet inodů plný, oprava selže. Nejprve odstraňte nepotřebné zálohy, logy a dočasné soubory.
  • Prohlídka logů serveru: MySQL error log, logy webového serveru a PHP error log jsou klíčové pro identifikaci příčiny chyby.

Na sdíleném hostingu nemusíte mít přístup k SSH nebo možnost zastavit MySQL službu. V takovém případě co nejpodrobněji popište chybu a okolnosti podpoře hostingu, aby vám pomohla rychleji.

Jak zabránit opakování chyby?

Jednorázová oprava problém vyřeší jen dočasně; trvalé řešení spočívá v údržbě a správě infrastruktury. Následující opatření výrazně snižují riziko poškození tabulek:

Zvažte převod MyISAM tabulek na InnoDB

InnoDB je ve většině moderních aplikací bezpečnější a odolnější. Nabízí zámky na úrovni řádků, transakční zpracování a obnovu po pádu. Převod provedete příkazem ALTER TABLE nazev_tabulky ENGINE=InnoDB;, ale před nasazením na produkci vždy testujte na testovacím prostředí a mějte kompletní zálohu. Některé starší aplikace mohou vyžadovat MyISAM kvůli fulltextovým indexům nebo specifickému chování.

Pravidelně zálohujte a ověřujte obnovitelnost záloh

Záloha je cenná pouze pokud jde kdykoliv obnovit. Doporučujeme denní inkrementální zálohy, týdenní plné zálohy a manuální zálohování před většími změnami. U e-shopů může být potřeba častější zálohování nebo využití binlogů pro obnovu do konkrétního času. Minimální doba uchování záloh by měla být sedm dní.

Sledujte využití disku a systémové zdroje

Je vhodné nastavit alarmy při dosažení 85–90 % zaplnění disku. MySQL potřebuje volné místo pro dočasné soubory, logy a indexy. Dále sledujte CPU, RAM a latence I/O operací. Pokud často narážíte na limity, zvažte upgrade na výkonnější hostingový plán, například Korporátní Hosting nebo Hosting s vysokým výkonem.

Kontrolujte pluginy, šablony a aktualizace softwaru

Starý nebo nekvalitní software může generovat neefektivní dotazy a zatěžovat databázi. Ve WordPressu odstraňujte nepoužívané pluginy, čistěte přebytečné logy a vyhýbejte se nedůvěryhodným rozšířením. Před aktualizací vždy testujte na stagingu, abyste předešli nečekaným problémům s databází.

Správně ukončujte server a plánujte údržbu

U VPS nebo dedikovaných serverů nikdy nevynucujte ukončení MySQL příkazem kill -9. Servis zastavujte kontrolovaně, údržbu plánujte mimo špičku a po restartu kontrolujte logy. Plánovaná údržba výrazně snižuje riziko poškození databáze.

Speciální poznámky pro WordPress

WordPress většinou zobrazuje chyby MySQL obecně jako chyba při připojení k databázi, ale detailní informace o poškozených tabulkách najdete v error logu. Mezi nejčastěji postižené tabulky patří wp_options, wp_posts, wp_postmeta, wp_comments a tabulky některých pluginů pro plánování nebo logování. Poškození wp_options může způsobit nefunkčnost základního nastavení, wp_posts zase problém s načítáním obsahu, poškozené log tabulky mohou zpomalit administraci.

WordPress má i vestavěnou opravu databáze, kterou aktivujete přidáním řádku define('WP_ALLOW_REPAIR', true); do souboru wp-config.php a spuštěním opravy na adrese /wp-admin/maint/repair.php. Po dokončení tuto možnost raději odstraňte, aby nebyla veřejně dostupná. Oprava přes phpMyAdmin bývá bezpečnější, protože vidíte přesně, kterou tabulku opravujete. Pokud hledáte optimalizovaný hosting pro WordPress, podívejte se na WordPress hosting.

Kdy vyhledat odbornou pomoc?

Ne každý problém s MySQL zvládnete vyřešit sami. Kontaktujte odborníky zejména pokud:

  • Poškozená tabulka obsahuje kritická data jako objednávky, platby, uživatelské účty nebo finance.
  • Oprava selhává nebo tabulka zmizela z databáze.
  • Databáze má několik GB a phpMyAdmin při opravě padá časovým limitem.
  • Vidíte chyby týkající se InnoDB tablespace, redo logů nebo podobné vážné problémy.
  • Server hlásí chyby disku, I/O nebo souborového systému.
  • Nemáte k dispozici aktuální funkční zálohu.

Při kontaktu s podporou vždy poskytněte úplný text chybové zprávy, názvy databází a tabulek, čas, kdy chyba začala, poslední aktualizace či migrace a datum poslední zálohy. Tyto informace urychlí řešení.

Rychlý kontrolní seznam

V naléhavých případech postupujte podle tohoto seznamu:

  • Z chybové zprávy zjistěte název poškozené tabulky.
  • Pořiďte aktuální zálohu databáze.
  • Nastavte web do údržbového režimu na krátkou dobu.
  • V phpMyAdmin vyberte správnou databázi.
  • Označte poškozenou tabulku a spusťte Opravit tabulku.
  • Po opravě tabulku zkontrolujte a otestujte funkčnost webu.
  • Sledujte disk, zdroje, zálohy a typ tabulek, abyste minimalizovali riziko opakování.

Často kladené dotazy

Znamená chyba „Tabulka je označena jako poškozená“ vždy ztrátu dat?

Ne nutně. Většinou lze MyISAM tabulky pomocí phpMyAdmin opravit bez ztráty dat. Pokud je tabulka velmi poškozená, může dojít k částečné ztrátě některých záznamů. Proto je klíčové udělat zálohu před opravou.

Je oprava tabulky přes phpMyAdmin bezpečná?

Obecně ano, ale každá údržba na živé databázi nese určité riziko. Doporučujeme vždy zálohovat, správně vybrat tabulku a pokud možno použít údržbový režim webu. U velkých nebo kritických tabulek je vhodnější profesionální podpora.

Mohu použít „Opravit tabulku“ u InnoDB tabulek?

Ne, InnoDB tabulky nejsou opraveny pomocí klasického REPAIR TABLE. Pro problémy s InnoDB je potřeba zkoumat MySQL logy, stav disku nebo obnovovat ze záloh. Náhodné pokusy o opravu mohou situaci zhoršit.

Proč se chyba opakuje?

Pokud se chyba vrací, základní problém nebyl odstraněn. Časté příčiny jsou nedostatek místa na disku, náhlé výpadky, vysoký zápisový provoz, chybné pluginy, stará verze MySQL nebo nadále používání MyISAM. Najít a odstranit příčinu je klíčové pro trvalé řešení.

Měl bych před opravou kontaktovat hostingovou podporu?

U jednoduchých MyISAM poškození stačí záloha a oprava přes phpMyAdmin. Pokud však máte důležitá data, neexistuje záloha, databáze je velká nebo vidíte InnoDB chyby, je lepší se nejprve obrátit na podporu hostingu.

Závěr

Chyba MySQL „Tabulka je označena jako poškozená“ se nejčastěji vyskytuje u MyISAM tabulek a často ji lze vyřešit pomocí phpMyAdmin. Správný postup je vždy začít zálohou, určit poškozenou tabulku, provést opravu a poté analyzovat příčinu chyby. Pravidelné zálohování, dostatečné zdroje serveru, přechod na InnoDB a udržování aktuálního softwaru snižují riziko opakování. Pokud se na vašem webu často objevují podobné chyby, doporučujeme zvážit revizi infrastruktury a využít vhodná hostingová řešení od Hostragons nebo konzultovat s odborníky.

Sdílejte tento článek:

Tým Hostragons

Aktuální průvodci od našeho týmu odborníků na hosting, servery a doménová jména. Pojďme společně najít to správné řešení pro váš projekt.

Kontaktujte nás