Zpět na blog

Rychlá řešení pro opravu poškozených tabulek v MySQL: Návod

Rychlá řešení pro opravu poškozených tabulek v MySQL: Návod

MySQL je jedním z nejpopulárnějších open-source RDBMS (relačních systémů řízení bází dat). Je nedílnou součástí rychle rostoucího LAMP Stack a získal si působivou oblibu mezi vývojáři a správci systémů. V porovnání s nerelačními databázemi poskytuje SQL vynikající funkce pro efektivní uspořádání, ukládání a správu dat. Výjimečné funkce pro uspořádání tabulek a vynikající schopnosti SQL databáze z ní dělají preferovanou volbu na všech úrovních organizace, jak velkých, tak malých.

Tabulky MySQL se mohou ve vzácných případech poškodit, což značí, že došlo k chybě a data v nich uložená jsou nečitelná. Když se pokusíte číst data z poškozené tabulky, server spadne a vyhodí chybu nebo seznam chyb.

Potenciální důvody poškození tabulek MySQL

Níže jsou uvedeny některé z nejtypičtějších důvodů poškození tabulek:

  • Služba MySQL po restartu spadne.
  • Stroj se neočekávaně vypne v důsledku výpadku napájení.
  • Vadná paměť nebo selhání hardwaru.
  • Softwarové chyby v OS nebo v kódu SQL.
  • MySQL se vypne během zápisu.
  • Systém se vypne během aktualizace SQL.

Před opravou tabulky, u které máte podezření na poškození, vytvořte zálohu svého datového adresáře. Pomůže to snížit pravděpodobnost ztráty dat. V tomto rychlém průvodci vás provedeme kroky pro řešení potíží při opravě poškozených tabulek v MySQL.

Požadavky

Chcete-li postupovat podle tohoto návodu, budete potřebovat následující:

Krok 1: Zastavení služby MySQL a zálohování dat

Nejprve zastavte službu MySQL pomocí příkazu systemctl:

Po zastavení služby SQL je dalším krokem vytvoření zálohy všech existujících souborů do nového adresáře. Použijte výchozí datový adresář Ubuntu /var/lib/mysql/ ke zkopírování všech systémových dat:

Krok 2: Identifikace chyby

Dále zahájíme vyšetřování a identifikujeme poškozenou tabulku. Pokud tabulka používá úložný modul MyISAM, použijte příkaz CHECK TABLE a ověřte stav tabulky:

Jako výstup se zobrazí zpráva potvrzující poškozenou tabulku nebo tabulky.

Krok 3: Oprava poškozené tabulky

Pokud se na tabulce MyISAM vyskytne chyba a vy jste ji identifikovali, použijte příkaz REPAIR TABLE k opravě této chyby:

Pokud byla oprava úspěšná, měli byste jako výstup vidět následující bezchybnou zprávu:

Pokud se však chyba objeví znovu, postupujte podle oficiální dokumentace k MySQL verze 8.0 pro opětovné sestavení nebo opravu tabulek.

Na rozdíl od úložného modulu MyISAM je proces opravy tabulek v úložném modulu InnoDB odlišný. InnoDB je výchozí úložný modul v MySQL 8.0. Nabízí automatickou kontrolu poškození a opravné operace. MySQL InnoDB kontroluje poškozené stránky prováděním kontrolních součtů na každé stránce, kterou čte. Pokud je zjištěn nesoulad, automaticky zastaví server MySQL.

Sečteno a podtrženo, tabulky InnoDB je potřeba opravovat jen zřídka. InnoDB obsahuje mechanismus obnovy po havárii, který dokáže většinu problémů vyřešit restartem.

Zkuste restartovat službu MySQL, abyste zjistili, zda získáte přístup k serveru:

Pokud se vám nepodaří obnovit poškozenou tabulku InnoDB ani po restartu, vyzkoušejte metodu „Dump and Reload“ doporučenou v dokumentaci k MySQL. Tato metoda spočívá v opětovném získání přístupu k poškozené tabulce pomocí nástroje mysqldump. Musí být vytvořena složka pro uložení a uchování logické zálohy tabulky. Jakmile je chyba opravena, tabulka se znovu načte zpět do databáze.

Krok 4: Využijte možnost innodb_force_recovery

Pokud server zůstává zhroucený nebo nedostupný, zkuste použít volbu force_recovery v InnoDB. Nastavení ON pro volbu force_recovery je vynikající způsob, jak obnovit databáze MySQL. Tuto volbu můžete povolit úpravou souboru mysqld.cnf v textovém editoru nano:

Pod sekci [mysqld] vložte následující řádek:

innodb force recovery

Uložte a zavřete soubor a restartujte službu MySQL.

Krok 5: Vytvořte soubor mysqldump

Pokud máte k poškozené tabulce přístup, použijte volbu mysqldump k uložení celého exportu do nového souboru. Pojmenujte nový soubor podle svých preferencí a nezapomeňte na konec přidat příponu .sql. V tomto případě soubor pojmenujeme jako demo.sql:

Poté použijte dotaz DROP TABLE k odstranění tabulky z databáze. Chcete-li se vyhnout nutnosti znovu otevírat příkazový řádek MySQL, můžete použít následující syntaxi:

Poté pomocí exportovaného souboru demo.sql, který jste právě připravili, obnovte tabulku:

Úspěšně jste opravili poškozenou tabulku MySQL a můžete s databází bez problémů pracovat.

Závěr

Při práci s velkým objemem dat může snadno dojít k poškození tabulek nebo neočekávaným pádům systému. Stojí za zmínku, že úložný systém MySQL InnoDB je odolnější vůči chybám než předchozí systém MyISAM. Tabulky využívající úložný systém InnoDB sice stále mohou být poškozeny, ale nebezpečí poškození tabulek a poruch je výrazně sníženo díky jeho funkcím automatického obnovení.

Na závěr můžete prozkoumat mnoho témat a návodů o databázích na našem blogu:

Příjemnou práci!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev je kreativní designér ve společnosti CloudSigma, který se zaměřuje na konzistentní firemní identitu prostřednictvím tradičních i inovativních marketingových kanálů. Je zdatný v propojování umělecké vize se strategickým marketingem za účelem vytváření působivých příběhů značky.

Komentáře

Zatím žádné komentáře. Buďte první.