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“