Tento článek popisuje, jak opravit tabulky a databáze MySQL. Jak tabulky databáze rostou, mohou čas od času nastat chyby. Když ano, MySQL obsahuje několik nástrojů, které můžete použít ke kontrole a opravě databázových tabulek. Chcete-li to provést, postupujte podle níže uvedených postupů v pořadí, v jakém se zobrazují.
Tento článek se vztahuje pouze na produkty uvedené v Podrobnosti článku postranní panel. Abyste mohli postupovat podle těchto postupů, musíte mít k serveru přístup root.Krok 1:Zálohování databází
Než se pokusíte opravit jakoukoli databázi, měli byste ji nejprve zálohovat. Chcete-li zálohovat všechny soubory ze všech databází, postupujte takto:
- Přihlaste se na svůj server pomocí SSH.
- Zastavte server MySQL pomocí příslušného příkazu pro vaši distribuci Linuxu:
- Pro CentOS a Fedoru zadejte:
service mysqld stop
-
Pro Debian a Ubuntu zadejte:
service mysql stop
- Pro CentOS a Fedoru zadejte:
-
Zadejte následující příkaz:
cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
Tento příkaz zkopíruje všechny soubory ze všech vašich databází do názvu adresáře podle aktuálního času (přesněji počtu sekund uplynulých od 1. ledna 1970). To zajišťuje, že každá záloha databáze je uložena v adresáři, který má jedinečný název. Pro větší ochranu můžete (a měli byste) zálohovat databázové soubory do vzdáleného umístění, které není na serveru. -
Restartujte server MySQL pomocí příslušného příkazu pro vaši distribuci Linuxu:
- Pro CentOS a Fedoru zadejte:
service mysqld start
-
Pro Debian a Ubuntu zadejte:
service mysql start
- Pro CentOS a Fedoru zadejte:
Krok 2:Spuštění mysqlcheck
Po zálohování databází jste připraveni začít s odstraňováním problémů. mysqlcheck program vám umožňuje kontrolovat a opravovat databáze za běhu MySQL. Tato funkce je užitečná, když chcete pracovat s databází bez zastavení celé služby MySQL.
Kromě toho mysqlcheck funguje na tabulkách, které používají databázové stroje MyISAM nebo InnoDB.
Informace o tom, jak určit, který modul úložiště databázová tabulka používá, naleznete v tomto článku.Chcete-li použít mysqlcheck , postupujte takto:
- Jako uživatel root zadejte následující příkaz:
cd /var/lib/mysql
-
Zadejte následující příkaz a nahraďte databázi názvem databáze, kterou chcete zkontrolovat:
mysqlcheck database
Předchozí příkaz zkontroluje všechny tabulky v zadané databázi. Případně, chcete-li zkontrolovat konkrétní tabulku v databázi, zadejte následující příkaz. Nahraďte databázi názvem databáze a nahraďte tabulku názvem tabulky, kterou chcete zkontrolovat:
mysqlcheck database table
-
Mysqlcheck zkontroluje zadanou databázi a tabulky. Pokud tabulka projde kontrolou, mysqlcheck zobrazí OK pro stůl. Pokud však mysqlcheck hlásí chybu pro tabulku, zadejte následující příkaz a pokuste se ji opravit. Nahraďte databázi názvem databáze a tabulku názvem tabulky:
mysqlcheck -r database table
- Pokud mysqlcheck nelze úspěšně opravit tabulku nebo tabulky, přejděte na následující postup.
Krok 3:Spuštění diagnostiky specifické pro motor
Pokud běží mysqlcheck problém nevyřeší, dalším krokem je spuštění diagnostiky specifické pro stroj používaný databázovou tabulkou nebo tabulkami. Postupujte podle příslušného postupu níže pro modul úložiště databáze vaší tabulky.
Informace o tom, jak určit, který modul úložiště používají vaše databázové tabulky, naleznete v tomto článku.Oprava tabulek MyISAM pomocí myisamchk
Pokud pro tabulku používáte úložiště MyISAM, můžete spustit myisamchk program na jeho opravu. Chcete-li to provést, postupujte takto:
myisamchk program funguje pouze pro tabulky, které používají úložiště MyISAM. Nefunguje pro engine InnoDB.- Zastavte server MySQL pomocí příslušného příkazu pro vaši distribuci Linuxu:
- Pro CentOS a Fedoru zadejte:
service mysqld stop
-
Pro Debian a Ubuntu zadejte:
service mysql stop
- Pro CentOS a Fedoru zadejte:
-
Zadejte následující příkaz:
cd /var/lib/mysql
- Přejděte do adresáře, kde se nachází databáze. Pokud se například databáze jmenuje zákazníci , zadejte cd customers.
-
Zadejte následující příkaz a nahraďte tabulku názvem tabulky, kterou chcete zkontrolovat:
myisamchk table
Chcete-li zkontrolovat všechny tabulky v databázi, zadejte následující příkaz:
myisamchk *.MYI
Pokud předchozí příkaz nefunguje, můžete zkusit smazat dočasné soubory, které mohou bránit myisamchk od správného běhu. Chcete-li to provést, přejděte zpět na /var/lib/mysql adresář a zadejte následující příkaz:
ls */*.TMD
Pokud jsou v seznamu uvedeny nějaké soubory .TMD, odstraňte je zadáním následujícího příkazu:
rm */*.TMD
Potom zkuste spustit myisamchk znovu.
-
Chcete-li se pokusit opravit tabulku, zadejte následující příkaz a nahraďte tabulku s názvem stolu, který chcete opravit:
myisamchk --recover table
-
Restartujte server MySQL pomocí příslušného příkazu pro vaši distribuci Linuxu:
- Pro CentOS a Fedoru zadejte:
service mysqld start
-
Pro Debian a Ubuntu zadejte:
service mysql start
- Pro CentOS a Fedoru zadejte:
- Otestujte opravený stůl nebo stoly.
Spuštění procesu obnovy InnoDB
Pokud pro databázovou tabulku používáte modul úložiště InnoDB, můžete spustit proces obnovy InnoDB. Chcete-li to provést, postupujte takto:
- K otevření souboru my.cnf použijte preferovaný textový editor soubor na vašem serveru. Umístění souboru my.cnf závisí na vaší distribuci Linuxu:
- V systémech CentOS a Fedora je to my.cnf soubor se nachází v /etc adresář.
- V Debianu a Ubuntu je to my.cnf soubor se nachází v /etc/mysql adresář.
- V souboru my.cnf vyhledejte soubor [mysqld] sekce.
-
Přidejte následující řádek do [mysqld] sekce:
innodb_force_recovery=4
-
Uložte změny do souboru my.cnf a poté restartujte server MySQL pomocí příslušného příkazu pro vaši distribuci Linuxu:
- Pro CentOS a Fedoru zadejte:
service mysqld restart
-
Pro Debian a Ubuntu zadejte:
service mysql restart
- Pro CentOS a Fedoru zadejte:
-
Chcete-li exportovat všechny databáze do databases.sql, zadejte následující příkaz soubor:
mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
-
Spusťte mysql a poté se pokuste zrušit postiženou databázi nebo databáze pomocí DROP DATABASE příkaz.
Pokud MySQL nedokáže zrušit databázi, můžete ji po zastavení serveru MySQL ručně odstranit v kroku 8 níže.
-
Zastavte server MySQL pomocí příslušného příkazu pro vaši distribuci Linuxu:
- Pro CentOS a Fedoru zadejte:
service mysqld stop
-
Pro Debian a Ubuntu zadejte:
service mysql stop
- Pro CentOS a Fedoru zadejte:
-
Pokud se vám v kroku 6 nepodařilo databázi zrušit, zadejte následující příkazy a odstraňte ji ručně. Nahraďte databázi názvem databáze, kterou chcete odstranit:
cd /var/lib/mysql rm -rf database
Ujistěte se, že jste nesmazali mysql nebo schema_výkonu adresáře! -
Pomocí svého preferovaného textového editoru otevřete soubor my.cnf soubor na vašem serveru a poté zakomentujte následující řádek v [mysqld] sekce, jak je znázorněno:
#innodb_force_recovery=4
Tím se zakáže režim obnovy InnoDB. -
Uložte změny do souboru my.cnf a poté spusťte server MySQL pomocí příslušného příkazu pro vaši distribuci Linuxu:
- Pro CentOS a Fedoru zadejte:
service mysqld start
-
Pro Debian a Ubuntu zadejte:
service mysql start
- Pro CentOS a Fedoru zadejte:
-
Chcete-li obnovit databáze ze záložního souboru, který jste vytvořili v kroku 5, zadejte následující příkaz:
mysql < databases.sql
- Otestujte obnovenou databázi.
Další informace
- Další informace o mysqlcheck , navštivte prosím https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
- Další informace o myisamchk , navštivte prosím https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.