MySQL je jedným z najpopulárnejších open-source RDBMS (systémov na riadenie relačných databáz). Je neoddeliteľnou súčasťou rýchlo rastúceho LAMP Stack a získal si pôsobivú základňu fanúšikov medzi vývojármi a správcami systémov. V porovnaní s nerelačnými databázami, SQL poskytuje vynikajúce funkcie na efektívne usporiadanie, ukladanie a správu údajov. Výnimočné funkcie usporiadania tabuliek a vynikajúce schopnosti SQL databázy z nej robia preferovanú voľbu na všetkých úrovniach organizácie, veľkých aj malých.
Tabuľky MySQL sa môžu v zriedkavých prípadoch poškodiť, čo znamená, že došlo k takejto chybe a údaje v nich uložené sú nečitateľné. Keď sa pokúsite čítať údaje z poškodenej tabuľky, server spadne a vyhodí chybu alebo zoznam chýb.
Potenciálne dôvody poškodenia tabuliek MySQL
Nasledujú niektoré z najbežnejších dôvodov poškodenia tabuliek:
- Služba MySQL po reštarte spadne.
- Zariadenie sa neočakávane vypne v dôsledku výpadku napájania.
- Chybná pamäť alebo zlyhanie hardvéru.
- Softvérové chyby v OS alebo v kóde SQL.
- MySQL sa vypne počas zápisu.
- Systém sa vypne do stavu OFF počas aktualizácie SQL.
Pred opravou tabuľky, o ktorej si myslíte, že je poškodená, vytvorte zálohu svojho adresára s informáciami. Pomôže to znížiť pravdepodobnosť straty údajov. V tomto rýchlom sprievodcovi vás prevedieme krokmi na riešenie problémov pri oprave poškodených tabuliek v MySQL.
Požiadavky
Na sledovanie tohto návodu budete potrebovať nasledovné:
- Najnovšiu verziu nainštalovaného Ubuntu vo vašom systéme.
- Používatelia systému musia mať práva sudo.
- Ak máte problémy s prístupom k svojmu účtu sudo, zvážte zmenu hesla root pre MySQL.
- Nastavené MySQL na vašom serveri.
Krok 1: Zastavenie služby MySQL a zálohovanie údajov
Najprv zastavte službu MySQL pomocou príkazu systemctl :
|
1 |
sudo systemctl stop mysql |
Po zastavení služby SQL je ďalším krokom vytvorenie záloh všetkých existujúcich súborov do nového adresára. Na skopírovanie všetkých systémových údajov použite predvolený dátový adresár Ubuntu /var/lib/mysql/ na skopírovanie všetkých systémových údajov:
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
Krok 2: Identifikácia chyby
Ďalej začneme vyšetrovanie a identifikujeme poškodenú tabuľku. Ak tabuľka používa úložný engine MyISAM, použite príkaz CHECK TABLE a overte stav tabuľky:
|
1 |
mysql> CHECK TABLE table_name; |
Ako výstup uvidíte správu potvrdzujúcu poškodenú tabuľku alebo tabuľky.
Krok 3: Oprava poškodenej tabuľky
Ak sa vyskytne chyba v tabuľke MyISAM a identifikovali ste ju, použite príkaz REPAIR TABLE na opravu chyby:
|
1 |
mysql> REPAIR TABLE table_name; |
Ak bola oprava úspešná, mali by ste ako výstup vidieť nasledujúcu bezchybnú sprá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 | +--------------------------+--------+----------+----------+ |
Ak sa však chyba objaví znova, postupujte podľa oficiálneho dokumentu pre MySQL verzie 8.0 na prebudovanie alebo opravu tabuliek.
Na rozdiel od úložného enginu MyISAM, proces opravy tabuliek v úložnom engine InnoDB je odlišný. InnoDB je predvolený úložný engine v MySQL 8.0. Obsahuje automatické operácie kontroly a opravy poškodenia. MySQL InnoDB kontroluje poškodené stránky vykonávaním kontrolných súčtov na každej stránke, ktorú číta. Ak sa zistí nezrovnalosť, automaticky zastaví server MySQL.
Hlavným záverom je, že tabuľky InnoDB je potrebné opravovať len zriedka. InnoDB obsahuje mechanizmus obnovy po páde, ktorý dokáže vyriešiť väčšinu problémov prostredníctvom reštartu.
Skúste reštartovať službu MySQL, aby ste zistili, či môžete získať prístup k serveru:
|
1 |
sudo systemctl restart mysql |
Ak sa vám nepodarí obnoviť poškodenú tabuľku InnoDB ani po reštarte, vyskúšajte metódu „Dump and Reload“ odporúčanú v dokumentácii k MySQL. Táto metóda zahŕňa opätovné získanie prístupu k poškodenej tabuľke pomocou nástroja mysqldump. Musí sa vytvoriť priečinok na uloženie a uchovanie logickej zálohy tabuľky. Po odstránení chyby sa tabuľka znova načíta späť do databázy.
Krok 4: Využite možnosť innodb_force_recovery
Ak server zostáva spadnutý alebo nedostupný, skúste použiť možnosť force_recovery v InnoDB. Zapnutie možnosti ON the force_recovery je vynikajúci spôsob, ako obnoviť databázy MySQL. Túto možnosť môžete povoliť úpravou súboru mysqld.cnf v textovom editore nano:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Vložte nasledujúci riadok pod sekciu [mysqld]:

Uložte a zatvorte súbor po reštartovaní služby MySQL.
Krok 5: Vytvorte súbor mysqldump
Ak máte prístup k poškodenej tabuľke, použite možnosť mysqldump na umiestnenie všetkých exportov do nového súboru. Pomenujte nový súbor podľa svojich preferencií a uistite sa, že na koniec pridáte príponu .sql. Tu súbor pomenujeme ako demo.sql:
|
1 |
mysqldump database_name table_name > demo.sql |
Potom použite dopyt DROP TABLE na odstránenie tabuľky z databázy. Môžete použiť nasledujúcu syntax, aby ste nemuseli znova otvárať príkazový riadok MySQL:
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
Potom pomocou exportovaného dokumentu demo.sql, ktorý ste práve pripravili, obnovte tabuľku:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
Úspešne ste opravili poškodenú tabuľku MySQL a ste pripravení bezproblémovo pracovať s databázou.
Záver
K poškodeniu tabuliek alebo neočakávaným pádom systému môže dôjsť, ak pracujete s veľkým objemom dát. Stojí za zmienku, že úložný systém MySQL InnoDB je odolnejší voči chybám ako predchádzajúci systém MyISAM. Tabuľky využívajúce úložný systém InnoDB sa stále môžu poškodiť, hoci nebezpečenstvo poškodenia tabuliek a porúch je výrazne znížené vďaka jeho funkciám automatického obnovenia.
Na záver, existuje mnoho tém a návodov o databázach, ktoré môžete preskúmať na našom blogu:
- Ako nainštalovať MySQL na CentOS 7
- Používateľ MySQL — vytvorenie a udelenie oprávnení
- Nastavenie replikácie v MySQL na Ubuntu
Príjemnú prácu!
Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.