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í:
- Nejnovější verzi nainstalovaného Ubuntu ve vašem systému.
- Uživatelé systému musí mít oprávnění sudo.
- Pokud máte potíže s přístupem k účtu sudo, zvažte změnu hesla root pro MySQL.
- Nastavené MySQL na vašem serveru.
Krok 1: Zastavení služby MySQL a zálohování dat
Nejprve zastavte službu MySQL pomocí příkazu systemctl:
|
1 |
sudo systemctl stop mysql |
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:
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
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:
|
1 |
mysql> CHECK TABLE table_name; |
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:
|
1 |
mysql> REPAIR TABLE table_name; |
Pokud byla oprava úspěšná, měli byste jako výstup vidět následující bezchybnou zprávu:
|
1 2 3 4 5 6 7 8 9 10 11 |
Výstup: +--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
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:
|
1 |
sudo systemctl restart mysql |
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:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Pod sekci [mysqld] vložte následující řádek:

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:
|
1 |
mysqldump database_name table_name > 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:
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
Poté pomocí exportovaného souboru demo.sql, který jste právě připravili, obnovte tabulku:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
Ú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:
- Jak nainstalovat MySQL na CentOS 7
- Uživatel MySQL — Vytvoření a udělení oprávnění
- Nastavení replikace v MySQL na Ubuntu
Příjemnou práci!
Komentáře
Zatím žádné komentáře. Buďte první.