Když se databáze MySQL poškodí, možná se divíte, proč se databáze poškodila. Tento příspěvek nastíní možné důvody poškození databáze, než odpoví na otázku:jak opravit poškozenou databázi MySQL?
Důvody korupce databáze MySQL
Databáze MySQL se může poškodit z některého z těchto důvodů:
- Náhlé vypnutí serveru
- Závada v hardwaru používaném k ukládání a načítání dat, jako je diskový subsystém, řadiče disků, ovladače atd.
- Proces ‘mysqld’ je ukončen, zatímco probíhá probíhající aktualizace
- Softwarová chyba
Může být náročné určit příčinu poškozené databáze. Ať už může být příčina jakákoli, měli byste se zajímat o to, jak opravit poškozenou databázi MySQL.
Jak opravit poškozenou databázi MySQL?
První věc, na kterou se musíte podívat, je chybová zpráva, kterou dostanete. Níže jsou uvedeny některé chybové zprávy, se kterými se můžete setkat, když dojde k poškození databáze MySQL:
Chyba 144: Tabulka se zhroutila a poslední oprava se nezdařila
Chyba 141: Duplicitní jedinečný klíč nebo omezení pro zápis nebo aktualizaci
Chyba 136: V indexovém souboru už není místo
Chyba 134: Záznam již byl smazán
Chyba 126: Indexový soubor se zhroutil/nesprávný formát souboru
Chyba: Nelze najít soubor ‚wtlicensemanager.dll‘
Pokud chcete provést opravu zdarma, máte dvě možnosti:
- Proveďte to ručně.
- Udělejte to pomocí softwaru ve zkušební době.
Software pro obnovu databáze může udělat lepší a rychlejší práci při opravě poškozené databáze.
Zde je jedna softwarová aplikace, kterou můžete použít k opravě poškozené databáze MySQL:
Tento nástroj pro opravu databáze MySQL opravuje databázi vytvořenou pomocí databázových strojů InnoDB a MyISAM MySQL. Před uložením si můžete stáhnout demo verzi nástroje pro opravu SQL a zobrazit náhled obnovitelné databáze.
Klíčové vlastnosti:
- Lze obnovit databázi MySQL v systémech Windows a Linux.
- Obnovuje soubory InnoDB (.ibdata, .ibd a .frm) a soubory MyISAM (myd, .myi a .frm)
- Obnovuje databázové objekty, jako jsou tabulky, vlastnosti tabulek, datové typy, pohledy, spouštěče atd.
- Umožňuje selektivní obnovu databázových komponent
Jak ručně opravit poškozenou databázi MySQL?
V MySQL existují dva typy úložišť:InnoDB a MyISAM. Tabulka InnoDB obsahuje soubory FRM, IBDATA a IDB, zatímco tabulka MyISAM obsahuje soubory FRM, MYD a MYI.
Než budeme pokračovat
Zde je několik věcí, které byste měli zvážit, než se pokusíte o ruční obnovení:
- Nerestartujte server
Když restartujete server, může server uvést poškozenou databázi do podezřelého režimu. Tím se databáze vypne. Může také vytvářet chyby při připojování k databázi. Měli byste se pokusit o obnovu bez restartování serveru.
- Používejte režim jednoho uživatele
Ujistěte se, že jste jediným uživatelem připojeným k databázi. Režim pro jednoho uživatele vám poskytuje veškerou kontrolu a eliminuje rušení ostatních uživatelů.
- Neupgradujte MySQL
Možná vás napadne aktualizovat databázi MySQL, abyste opravili poškozené soubory. Ale není tomu tak. Upgrade může způsobit trvalou ztrátu dat.
- Proveďte zálohu poškozené databáze MySQL
Je důležité mít zálohu poškozeného souboru, protože může dojít k chybám, které mohou způsobit ztrátu dat. Neexistuje žádná záruka, že vaše ruční kroky neovlivní zdravé soubory. Před pokusem o ruční obnovení je tedy bezpečné mít zálohu.
Pro zálohování použijte následující příkaz:
mysqldump název_db> název_databáze.sql
Stačí zadat název databáze místo názvu databáze.
Pokud výše uvedené nefunguje, zkuste následující:
mysqldump –u[username] –p[heslo] [název_databáze]> [dump_file].sql
Existuje další způsob, jak zálohovat databázi:
zastavení služby mysqld
cp -r /var/lib/mysql /var/lib/mysql_bkp
Nyní, když máme zálohu, můžeme se pokusit opravit poškozenou databázi MySQL.
Jak ručně obnovit databázi MySQL?
Oprava databáze MyISAM
Pokud pro svou databázovou tabulku používáte databázové úložiště MyISAM, můžete tabulku opravit pomocí následujících příkazů:
Mysqlcheck
Pokud váš server MySQL běží, opravte tabulku spuštěním následujícího příkazu mysqlcheck:
mysqlcheck -r [název_databáze]
Nezapomeňte nahradit ‘database_name’ názvem vaší databáze.
Myisamchk
Pokud server neběží, zkuste opravit databázovou tabulku pomocí příkazu myisamchk:
Poznámka: Před spuštěním tohoto příkazu se ujistěte, že server nemá otevřené žádné tabulky.
myisamchk název_tabulky
Opravte název tabulky názvem tabulky ve vašem případě. Tento příkaz automaticky opraví vaši tabulku.
Chcete-li restartovat server, zadejte následující:
spuštění služby mysqld
Vynutit obnovu InnoDB
Chcete-li extrahovat data z poškozené databázové tabulky InnoDB, budete muset provést vynucenou obnovu InnoDB.
Krok 1: Nejprve musíte otevřít soubor my.cnf.
V tomto souboru vyhledejte sekci [mysqld].
Přidejte do této sekce následující řádek:
innodb_force_recovery=1
Nyní uložte konfigurační soubor a restartujte MySQL server. Hodnotu innodb_force_recovery můžete nastavit od 1 do 6. Hodnota vyšší než 4 se však nedoporučuje, protože může poškodit data.
Krok 2: Uložte data tabulky do nového souboru.
Chcete-li to provést, použijte následující příkaz:
mysqldump –u user –p db_name table_name> single_dbtable_dump.sql
Krok 3: Odstraňte poškozenou tabulku z databáze.
mysql –u user –p –execute=”DROP TABLE název_db.název_tabulky”
Krok 4: Obnovte tabulku ze souboru výpisu.
mysql –u user –p
Krok 5: Jakmile budou soubory opraveny, deaktivujte režim vynucení obnovy pomocí následujícího příkazu:
#innodb_force_recovery=…
Nyní můžete restartovat službu MySQL v normálním režimu.
Doufáme, že výše uvedené metody vám pomohou opravit poškozenou databázi MySQL.