Obnova poškozené MySQL databáze [Drupal]
Cas od času se můžeme setkat s hlášením:
warning: Table ‚xxxxx‘ is marked as crashed and should be repaired
Může se to stát například v případě, kdy dojde k zaplnění disku a systém chce zapsat data, což se mu samozřejměn nepodaří.
Obnova je poměrně snadná, ale ne vždy se musí podařit obnovit vše co bychom chtěli. Pro obnovu je nutné znát alespoň základní
mysql příkazy. Uvedu zde pouze vzorový postup. Pokud se chceme do MySQL přihlásit jako root, v terminálu zadáme:
mysql -p
a zadáme heslo
Vybereme databázi:
use jmenodatabaze;
a zadáme obnovu poškozené tabulky:
REPAIR TABLE jmenoposkozenetabulky;
Počkáme a nakonec se odhlásíme z MySQL:
exit mysql
Stručné opakování MySQL příkazů:
http://www.junext.net/mysql/
Výpis databází MySQL
SHOW DATABASES;
– tento dotaz zobrazuje jména databází ve spuštěném MySQL
Založení databáze
CREATE DATABASE nazev_databaze;
– tento příkaz vytvoří databázi se jménem „nazev_databaze“ (délka názvu může být max. 65 znaků)
– abychom mohli databázi používat musíme v ní vytvořit jednu či více tabulek příkazem CREATE TABLE (viz níže)
– při práci v příkazovém řádku musíme určit aktivní databázi příkazem USE (viz níže)
Nastavení aktivní databáze
USE nazev_databaze;
– databázi „nazev_databaze“ nastavíme takto jako aktivní a můžeme s ní pracovat
Název aktuální databáze
SELECT DATABASE();
– vrací název aktuální databáze
Výpis seznamu tabulek v databázi
SHOW TABLES;
– zobrazí seznam tabulek aktuální databáze
SHOW TABLES FROM nazev_databaze;
– zobrazí seznam tabulek z databáze „nazev_databaze“
SHOW TABLE STATUS FROM nazev_databaze;
– zobrazí souhrnný seznam informací o jednotlivých tabulkách databáze, př.: Avg_row_length, Data_length, Max_data_length, Index_length…
Zadávání příkazů ze souboru
SOURCE cesta/soubor;
– př.: SOURCE /moje/prikazy/zal_knih.mysql;
– MySQL vykoná všechny příkazy uvedené v souboru „zal_knih.mysql“
Smazání databáze
DROP DATABASE nazev_databaze;
– vymaže celou databázi se jménem „nazev_databaze“, tedy všechny tabulky a data v nich uložená
Vytvoření tabulky
CREATE TABLE nazev_tabulky (nazev_sloupce datovy_typ,... );
– v databázi, která je právě aktivní vytvoříme novou tabulku (typu MYISAM)
– délka názvu tabulky (a sloupců) může být max. 65 znaků
– příklad:
CREATE TABLE knihovna (autor VARCHAR(20),
kniha VARCHAR(20) NOT NULL PRIMARY KEY,
stran SMALLINT UNSIGNED,
rok YEAR(4),
poznamka ENUM('neprecteno','precteno','pujceno') DEFAULT 'neprecteno');
– datové typy jsou popsány v samostatné kapitole viz: datové typy
Typy tabulek
CREATE TABLE nazev_tabulky (nazev_sloupce datovy_typ,... ) TYPE=typ_tabulky;
– MYISAM – standard MySQL od verze 3.23.0; soubory s tabulkami mají koncovku .myd (data) a .myi (indexy)
– ISAM – standardní typ tabulky ve starších databázích; dnes nahrazen typem MYISAM
– MERGE – formát vhodný pro spojení MYISAM tabulek se stejně nadefinovanými poli
– HEAP – tabulka tohoto typu je uložena pouze v paměti (může být velmi rychlá), má ale řadu omezení
– INNODB – uzamykání tabulky je vykonáváno na úrovni řádků; před použitím je nutná kompilace MySQL s podporou INNODB
– BDB – typ tabulky podobný INNODB; zatím ve fázi testování
– před nasazením jiného typu než MYISAM si prostudujte originální dokumentaci
Vytvoření dočasné tabulky
CREATE TEMPORARY TABLE nazev_tabulky (nazev_sloupce datovy_typ,... );
– takto vytvoříme dočasnou, která po uzavření spojení s databází zanikne
Výpis popisu tabulky
DESCRIBE nazev_tabulky;
SHOW COLUMNS FROM nazev_tabulky;
– tento dotaz nám zobrazí definici požadované tabulky (názvy + datové typy + modifikátory)
Změny v tabulce
ALTER TABLE nazev_tabulky prikaz1, prikaz2, prikaz3, prik...;
– provede nějaký příkaz/příkazy s tabulkou „nazev_tabulky“, viz dále:
Nový sloupec
.. ADD nazev_noveho_sloupce datovy_typ;
.. ADD COLUMN nazev_noveho_sloupce datovy_typ;
– příkaz přidá do tabulky nový sloupec
– př.: ALTER TABLE knihovna ADD COLUMN vydavatel VARCHAR(10);
– modifikátory:
.. FIRST
– přidá nový sloupec na začátek tabulky
– př.: ALTER TABLE knihovna ADD COLUMN cislo SMALLINT FIRST;
.. AFTER nazev_sloupce;
– přidá nový sloupec za sloupec „nazev_sloupce“
– př.: ALTER TABLE knihovna ADD COLUMN zanr VARCHAR(10) AFTER kniha;
Smazání sloupce
.. DROP nazev_odstranovaneho_sloupce;
.. DROP COLUMN nazev_odstranovaneho_sloupce;
– příkaz odebere požadovaný sloupec
– př.: ALTER TABLE knihovna DROP vydavatel;
Změna parametrů
.. CHANGE nazev_sloupce novy_nazev_sloupce nove_nastaveni;
– změní datový typ a může sloupec i přejmenovat
– př.: ALTER TABLE knihovna CHANGE kniha knihy VARCHAR(30) NOT NULL;
Modifikace parametrů
.. MODIFY nazev_sloupce nove_nastaveni;
– u požadovaného sloupce změní datový typ
– př.: ALTER TABLE knihovna MODIFY kniha VARCHAR(30) NOT NULL;
Přejmenování tabulky
.. RENAME novy_nazev_tabulky;
– příkaz přejmenuje požadovanou tabulku
– př.: ALTER TABLE knihovna RENAME knihovnicka;
Indexy a klíče v tabulkách
SHOW KEYS FROM nazev_tabulky;
SHOW INDEX FROM nazev_tabulky;
– vypíše podrobné informace o primárních klíčích a indexech v tabulce
Zamykání tabulek
LOCK TABLES nazev_tabulky READ, nazev_tabulky WRITE;
– uzamkne vyjmenované tabulky pro čtení (READ), nebo zápis (WRITE)
– po uzamknutí mají právo čtení, nebo zápisu v tabulce pouze ty příkazy, které se nachází mezi LOCK … UNLOCK
UNLOCK TABLES;
– odemčení všech zamčených tabulek
BEGIN; dotaz1; dotaz2; dot...; COMMIT;
– pouze u typu tabulky InnoDB
– všechny dotazy se vykonají pouze za předpokladu, že se spojení MySQL nepřeruší až do vykonání COMMIT
– pokud je spojení během dotazování přerušeno, neprovede se ani jeden dotaz mezi BEGIN a COMMIT
SELECT co_nacist FROM odkud_nacist LOCK IN SHARE MODE;
– pouze u typu tabulky InnoDB
– dotaz počká až se dokončí právě probíhající dotazy a až potom načte záznam
Smazání tabulky
DROP TABLE nazev_tabulky;
– odstraní z aktivní databáze tabulku s názvem „nazev_tabulky“