GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak opravit databázi MySQL

Úvod

MySQL nabízí několik různých způsobů analýzy a opravy databází. Chyby a anomálie se objevují z mnoha důvodů, z nichž některé zahrnují:

  • Aktualizace nebo downgrade MySQL.
  • Rychlé změny v indexech nebo datech.
  • Nesrovnalosti v tabulce.

Při kontrole poškozených dat a opravě tabulek závisí kroky podniknuté k opravě chyb na způsobu připojení k databázi, stavu databázového serveru, typu chyby a použitém databázovém stroji.

Tento článek ukazuje několik způsobů, jak odstraňovat problémy a opravovat databázi MySQL.

Předpoklady

  • Terminál nebo příkazový řádek s právy root.
  • Nainstalováno a nakonfigurováno MySQL verze 8.0.
  • Poškozená databáze nebo databázová tabulka.

Jak zkontrolovat chyby v tabulce MySQL

Spuštění diagnostiky je prvním krokem k odstraňování problémů. Existují dva způsoby, jak zkontrolovat chyby v tabulce MySQL:

  • Prostřednictvím CHECK TABLE MySQL dotaz.
  • Pomocí terminálového programu mysqlcheck .

Zkontrolujte tabulku pomocí CHECK TABLE

CHECK TABLE dotaz funguje v MySQL, když je služba spuštěna. Obecné použití je:

CHECK TABLE <table name> [, table name, table name] [option] [option];

Nejjednodušší použití je jedna tabulka bez jakýchkoli možností:

CHECK TABLE <table name>;

Výstup CHECK TABLE dotaz zobrazí informativní tabulku o výsledcích kontroly:

Dostupné možnosti při kontrole tabulek jsou:

  • FOR UPGRADE - zjistí nekonzistence verzí. Například MySQL 8.0 nepodporuje dvouciferné roky, takže tabulka obsahující takové hodnoty je označena pro upgrade.
  • QUICK - nekontroluje řádky na nesprávné propojení. To je užitečné, abyste se vyhnuli časovým limitům.
  • FAST - provádí kontrolu tabulek, které nejsou správně uzavřeny.
  • CHANGED - kontroluje pouze tabulky se změnami od poslední kontroly nebo tabulky, které nebyly správně uzavřeny.
  • MEDIUM - zkontroluje řádky tabulky, aby ověřila platnost smazaných odkazů, a provede kontrolní součet pro řádky.
  • EXTENDED - zkontroluje úplnou konzistenci.

Bez možnosti CHECK TABLE provádí MEDIUM zkontrolujte tabulky a pohledy MyISAM. FOR UPGRADE a QUICK provádět kontroly tabulek a pohledů enginu InnoDB, zatímco ostatní možnosti jsou ignorovány.

Možnosti můžete také kombinovat pro podrobnější kontrolu. Chcete-li například provést rychlou kontrolu a zjistit, zda je tabulka uzavřena adekvátně, spusťte:

CHECK TABLE <table name> FAST QUICK;

Všechny možnosti, které se nevztahují na tabulky, jsou ignorovány.

Zkontrolujte tabulku pomocí mysqlcheck

mysqlcheck příkaz je verze CHECK TABLE pro příkazový řádek . Program běží v terminálu během provozu služby MySQL. Chcete-li provést kontrolu:

1. Jako uživatel root přejděte do adresáře, kde jsou uloženy databáze:

sudo su
cd /var/lib/mysql

2. Zkontrolujte celou databázi pomocí:

mysqlcheck <database name>

Případně zkontrolujte konkrétní tabulku v databázi zadáním názvu tabulky:

mysqlcheck <database name> <table name>

Jak opravit databázi MySQL

Existuje několik způsobů, jak opravit databázi v MySQL. Mějte však na paměti, že tyto metody nejsou rychlým řešením a mohou vést ke ztrátě dat. Pokud jsou databázové tabulky často poškozeny, identifikujte důvod výskytu.

Před provedením jakýchkoli změn a zahájením oprav vytvořte kopii adresáře:

cp -rfv /var/lib/mysql /var/lib/mysql_copy

Případně vytvořte záložní verzi databáze, než vyzkoušíte jakékoli z opravných řešení. Postupujte podle našeho průvodce:Jak zálohovat a obnovit databázi MySQL.

Níže naleznete tři možnosti, jak opravit databázi MySQL.

Oprava databáze MySQL pomocí dotazu REPAIR TABLE

Po naskenování a vyhledání databáze a tabulek s problémy je nejrychlejší způsob, jak problém vyřešit, pomocí REPAIR TABLE dotaz:

Pokud se server během opravy vypne, spusťte znovu REPAIR TABLE operace, když se server znovu spustí. Ujistěte se, že jste to udělali před provedením jakýchkoli dalších operací na stejném stole. Za normálních podmínek nezpůsobí tabulka MyISAM při použití této metody ztrátu dat.

Oprava databáze MySQL pomocí mysqlcheck

mysqlcheck příkaz je alternativou k opravě databázových tabulek v terminálu.

1. Nejprve přejděte do složky databáze MySQL jako uživatel root:

cd /var/lib/mysql

2. Přidejte -r možnost mysqlcheck příkaz k opravě databázové tabulky:

mysqlcheck -r <database> <table name>

Parametr mysqlcheck -r příkaz je terminálová verze REPAIR TABLE dotaz.

Oprava databáze MySQL pomocí ALTER TABLE

Použijte ALTER TABLE dotaz k opětovnému sestavení tabulky pomocí stejného úložiště. Pokud máte například tabulku InnoDB, spusťte:

ALTER TABLE <table name> ENGINE = InnoDB;

Chcete-li znovu sestavit tabulku MyISAM, použijte:

ALTER TABLE <table name> ENGINE = MyISAM;

Pokud si nejste jisti, který modul úložiště tabulka používá, spusťte následující dotaz a zjistěte:

SHOW CREATE TABLE <table name>;

Spouštění diagnostiky a oprav specifických pro motor databáze MySQL

V závislosti na použitém databázovém stroji poskytuje MySQL specifické přístupy pro analýzu a opravu databázové tabulky.

Tabulky MyISAM jsou náchylné k poškození. Ve většině případů však lze chyby snadno opravit.

Při práci s databázemi InnoDB se poškození objeví, když se hodnoty kontrolního součtu neshodují. K chybám obvykle dochází v důsledku výpadku napájení nebo jiného hardwarového problému.

Kontrola a oprava tabulek MyISAM pomocí myisamchk

MySQL poskytuje specifickou kontrolu pro tabulky MyISAM.

1. Vypněte server MySQL. Otevřete terminál a spusťte:

systemctl mysql stop

2. Jako uživatel root přejděte do umístění databáze:

cd /var/lib/mysql/<database name>

3. Chcete-li zkontrolovat konkrétní tabulku, spusťte:

myisamchk <table name>

4. Opravte tabulku spuštěním:

myisamchk --recover <table name>

5. Restartujte server MySQL:

systemctl restart mysql

6. Nakonec po obnovení zkontrolujte tabulku v MySQL:

sudo mysql -u <user> -p <password>
USE <database name>;
SELECT * FROM <table name> LIMIT 4;

Spuštění procesu obnovy InnoDB

Dokumentace MySQL navrhuje spustit proces obnovy InnoDB pro databáze InnoDB.

1. Najděte a otevřete globální konfigurační soubor pomocí svého oblíbeného textového editoru. Pro systémy Ubuntu a Debian je umístění:

cd /etc/mysql/my.cnf

2. Přidejte následující možnost do my.cnf soubor:

[mysqld]
innodb_force_recovery=4

Ve výchozím nastavení je možnost vynucené obnovy nastavena na 0 (vypnuto) a jde až na 6. Každá nová úroveň zahrnuje funkce obnovy nižších čísel.

3. Uložte a zavřete soubor.

4. Restartujte server MySQL, abyste se ujistili, že platí nový konfigurační soubor:

systemctl restart mysql

5. V domovské složce exportujte všechny databáze do záložního souboru pomocí mysqldump příkaz:

sudo mysqldump --all-databases --add-drop-database --add-drop-table --routines > <file name>.sql

6. Spusťte klienta MySQL a zrušte všechny dotčené databázové tabulky. Chcete-li zrušit tabulku databáze, zkuste:

DROP TABLE IF EXISTS <table name>;

Pokud tabulka neklesne, zkuste databázovou tabulku odebrat ručně. Přihlaste se jako uživatel root a přejděte do adresáře, kde jsou databáze:

sudo su
cd /var/lib/mysql/<database name>

Odeberte tabulku databáze:

rm -r <table name>

7. Zastavte server MySQL:

systemctl stop mysql

8. V souboru my.cnf zakomentujte soubor innodb_force_recovery možnost přidaná v kroku 2 pro deaktivaci režimu obnovení. Poté soubor uložte a zavřete.

9. Znovu spusťte MySQL server:

systemctl start mysql

10. Obnovte databázi ze zálohy .sql soubor v prostředí MySQL. Přihlaste se do klienta MySQL:

sudo mysql -u <username> -p <password>

11. Spusťte následující dotaz pro import databází:

USE <database name>;
# Turning off auto commit is optional and speeds things up for larger databases
SET autocommit=0; 
SOURCE <file name>.sql;

12. Nakonec otestujte databázi, abyste se ujistili, že vše funguje správně. Pokud ne, obnovte databázi ze zálohy a vyzkoušejte alternativní metodu.


Ubuntu
  1. Jak kopírovat tabulky MySQL mezi databázemi

  2. Jak opravit poškozenou tabulku databáze MySQL

  3. Jak zkopírovat tabulku z jedné databáze mysql do jiné databáze mysql

  1. Jak zkontrolovat verzi MySQL v Linuxu

  2. Jak vytvořit databázi MySQL v Workbench

  3. Jak opravit databáze a tabulky MySQL pomocí phpMyAdmin

  1. Jak vytvořit tabulku v MySQL

  2. Jak používat MySQL SHOW TRIGGERS

  3. Jak zálohovat a obnovit databázi MySQL