načítání...
nákupní košík
Košík

je prázdný
a
b

Kniha: Linux - Richard Stones; Neil Matthew

Linux
-14%
sleva

Kniha: Linux
Autor: ;

Nepostradatelný průvodce, který staví na obrovském úspěchu předchozích vydání, pokračuje v populárním výukovém stylu a přenese vás rovnýma nohama doprostřed vývoje programů pro ... (celý popis)
Kniha teď bohužel není dostupná.

»hlídat dostupnost


hodnoceni - 70.3%hodnoceni - 70.3%hodnoceni - 70.3%hodnoceni - 70.3%hodnoceni - 70.3% 100%   celkové hodnocení
1 hodnocení + 0 recenzí

Specifikace
Nakladatelství: Computer press
Médium / forma: Tištěná kniha
Rok vydání: 2008-12-05
Počet stran: 832
Rozměr: 167 x 225 mm
Úprava: 829 stran : ilustrace
Název originálu: Beginning Linux programming
Spolupracovali: překlad David Krásenský
Vazba: vázaná s laminovaným potahem
ISBN: 9788025119334
EAN: 9788025119334
Ukázka: » zobrazit ukázku
Popis

Nepostradatelný průvodce, který staví na obrovském úspěchu předchozích vydání, pokračuje v populárním výukovém stylu a přenese vás rovnýma nohama doprostřed vývoje programů pro Linux a ostatní operační systémy unixového typu. Dvojice zkušených linuxových programátorů se věnuje širokému spektru témat, z nichž poznáte, co všechno Linux nabízí, jak maximalizovat produktivitu práce při programování a jak systém Linux vytěžit na maximum. Ke každému probíranému tématu uvádějí autoři nejprve potřebnou teorii a poté je ilustrují na praktických příkladech a jasně srozumitelném výkladu krok za krokem. Výuka probíhá na reálných projektech. Ze začínajícího linuxového programátora se tak rychle stanete zručným profesionálem schopným vytvářet jakékoli aplikace pro systém Linux. S knihou se mimo jiné naučíte: - Tvořit základní datové struktury v jazycích C, C++ a v shellu - Formátovat vstup a výstup, spravovat soubory a jiné základy - Pracovat se standardními linuxovými knihovnami - Spravovat dynamickou paměť, předcházet uváznutí - Pracovat s daty v databázích dbm i MySQL - Ladit zdrojový kód s pomocí nástroje gdb - Plánovat a spouštět nové procesy, pracovat s potomky - Řídit přístup k prostředkům pomocí semaforů - Pracovat s internetovým démonem xinetd/inetd - Tvořit grafické uživatelské rozhraní aplikací (GUI) v prostředích GNOME a KDE Komu je kniha určena: - Publikace je pro všechny programátory a vývojáře, kteří si chtějí rozšířit znalosti práce v systému Linux. Zkušenosti s jazykem C/C++ jsou výhodou. Zdrojové kódy k příkladům z knihy citlivě lokalizované do češtiny si čtenáři mohou stáhnout na adrese http://knihy.cpress.cz/K1371. Zdrojové příklady jsou k dispozici ve dvojím kódování: iso-8859-2 a utf8. Překlad 4. vydání uznávané publikace Beginning Linux Programming. Knihy z edice Začínáme programovat naučí čtenáře novým programovacím jazykům a technologiím velmi snadno. Je to dáno ryze výukovou strukturou výkladu, který vás provede veškerými popisovanými technikami. (začínáme programovat)

Předmětná hesla
Související tituly dle názvu:
Linux Fedora Core 5 + DVD Linux Fedora Core 5 + DVD
Zloský Ondřej
Cena: 269 Kč
The Rolling Stones XL The Rolling Stones XL
Golden Reuel
Cena: 3284 Kč
Mandriva Linux 2008.1 CZ + 4 DVD Mandriva Linux 2008.1 CZ + 4 DVD
Bíbr Ivan
Cena: 472 Kč
Linux Linux
Kysela Martin
Cena: 195 Kč
Legenda Rolling Stones Legenda Rolling Stones
Crouch Glen
Cena: 297 Kč
Recenze a komentáře k titulu
Zatím žádné recenze.


Ukázka / obsah
Přepis ukázky

357

8

MySQL

Základní správu dat v otevřených souborech a v jednoduché, ale rychlé databázi dbm jsme jižzvládli, takže se můžeme pustit do vyššího, plnohodnotného nástroje pro práci s daty, a sice dorelačního databázového systému (někdy se mu také komplikovaněji říká relační systém řízení báze dat)

neboli RDBMS (Relational Database Management System).

Dvěma nejznámějšími relačními databázovými systémy typu open source jsou zřejmě PostgreSQL a MySQL, i když jich existuje mnohem více. Existuje také řada komerčních relačních databází, jako je Oracle, Sybase a DB2, z nichž všechny mají velmi bohaté funkce a pracují na mnohaplatformách. Oblíbenou alternativou na komerčním trhu je také Microsoft SQL Server, který je ovšem omezen jen na platformu Windows. Každý z těchto balíků má své silné stránky; my se ale v této

knížce budeme věnovat výhradně databázi MySQL, a to jednak z důvodů úspory místa, jednak

proto, že celá kniha hovoří o otevřeném softwaru open source.

MySQL se zrodilo někdy okolo roku 1984, ale dnes již několik roků probíhá jeho vývoj a údržbakomerčně, pod hlavičkou společnosti MySQL AB. Protože databáze MySQL je typu open source,zaměňují se jeho prvky často s jinými projekty open source. Stojí za zmínku, že i když můžeme databázi

MySQL v mnoha situacích používat podle podmínek GNU General Public License (GPL), za jistých

okolností si naopak k produktu musíme zakoupit komerční licenci. Přesné podmínky si vždy ověřte

na webových stránkách www.mysql.com a rozhodněte, které vydání MySQL pro dané účely použijete. Jestliže potřebujete databázi typu open source, podmínky MySQL pod GPL jsou pro vásnepřijatelné a komerční licenci se vám nechce kupovat, zkuste se podívat na PostgreSQL, jehož licenční

podmínky jsou méně restriktivní (alespoň v době vzniku této knihy) a které tak může být velice

vhodnou alternativou. Podrobné informace najdete na webových stránkách www.postgresql.org.

Chcete-li se o databázi PostgreSQL naučit více, podívejte se buď do knihy Beginning Databases with

PostgreSQL: From Novice to Professional, Second Edition (Apress, 2005, ISBN 1590594789), anebo

v češtině do knihy PostgreSQL Praktický průvodce (Computer Press, 2003, ISBN: 80-722-6954-2).


Kapitola 8 – MySQL

358

Tato kapitola se věnuje následujícím tématům databáze MySQL:

instalace MySQL,

administrativní příkazy, nezbytné pro obsluhu MySQL,

základní funkce MySQL,

rozhraní API pro přístup k databázím MySQL z programů v jazyce C,

vytvoření relační databáze, kterou můžeme v aplikaci pro sbírku CD využívat z jazyka C.

Instalace

Ať už máte na počítači jakoukoli variantu Linuxu, databázi MySQL v ní máte nejspíše předemse

stavenou a připravenou k instalaci. Hotové balíky s instalací jsou tak například k dispozici vsou

časných verzích distribuce Red Hat, SuSE i Ubuntu. Obecně doporučujeme využít právě tyto

hotové balíky, protože tak databázi MySQL „rozchodíte“ nejsnáze a nejrychleji. Pokud v danédis

tribuci balík MySQL nemáte nebo pokud si chcete nainstalovat nejnovější verzi, můžete si stáhnout

příslušné binární i zdrojové balíky z webových stránek MySQL.

V této kapitole budeme hovořit pouze o instalaci hotových verzí MySQL.

Balíky MySQL

Pokud se z jakéhokoli důvodu rozhodnete stáhnout novou verzi MySQL a nepoužít hotovou,bu

deme pro účely této knížky předpokládat komunitní vydání ve Standardním sestavení. K dispozici

jsou také balíky Max a Debug. Z toho balíky Max obsahují různé doplňující funkce, jako jepodpo

ra méně obvyklých typů souborů pro záznam dat, a různé pokročilé funkce, jako je clustering.Ba

líky typu Debug jsou kompilovány s dalším kódem a informacemi potřebnými pro ladění;

doufejme, že tyto informace nízké úrovně nebudete nikdy potřebovat.

Ladicí verze Debug nepoužívejte v produkčním prostředí; z důvodu podpory zmíněných ladicích

funkcí jsou pomalejší.

Pro vývoj aplikací MySQL si musíte kromě vlastního serveru nainstalovat i vývojové knihovny.Ob

vykle najdete přímo ve správci balíků zvláštní volbu MySQL; stačí tedy zkontrolovat, jestli jsouvý

vojové knihovny nainstalovány také. Na obrázku 8.1 vidíme správce balíků z distribuce Fedora,

který je připraven k instalaci MySQL i doplňujícího vývojového balíku.

V jiných distribucích je uspořádání balíků trochu jiné. Na obrázku 8.2 je například správce balíků

Synaptic z distribuce Ubuntu, v němž je opět připravena instalace MySQL.


Instalace

359

Obrázek 8.1

Obrázek 8.2


Kapitola 8 – MySQL

360

V rámci instalace MySQL se zároveň vytvoří uživatelský účet „mysql“, který je zároveň výchozím uživatelským jménem pro spuštění démonu MySQL serveru. Po instalaci všech potřebných balíků musíme ověřit, jestli se MySQL spouští automaticky. V době vzniku těchto řádků platilo automatické spouštění jen v některých distribucích, jako napříkladUbuntu, zatímco jiné, třeba Fedora, to nedělaly. Zjistit, jestli MySQL běží, není naštěstí vůbec složité:

$ ps –el | grep mysqld

Uvidíme-li ve výpise alespoň jeden proces s názvem mysqld, znamená to, že server byl správně spuštěn. V mnoha systémech uvidíme také proces safe_mysqld, jehož úlohou je spuštění vlastního

procesu mysqld pod správným uživatelským ID.

Potřebujete-li server MySQL spustit, restartovat nebo zastavit, můžete využít grafického ovládacího

panelu služeb. Panel s názvem Service Configuration z distribuce Fedora je na obrázku 8.3.

Obrázek 8.3

Z editoru pro konfiguraci služeb také zjistíme, jestli se server MySQL bude spouštět při každém

startu systému Linux automaticky.

Konfigurace po instalaci

Pokud všechno proběhlo v pořádku, je MySQL nainstalováno a je spuštěno s výchozí množinou

voleb. Správnost tohoto předpokladu si můžeme snadno ověřit:

$ mysql –u root mysql

Objeví-li se zpráva „Welcome to the MySQL monitor“ a po ní výzva mysql>, znamená to, že server

správně běží. V tomto okamžiku se samozřejmě může k serveru připojit kdokoli a získá oprávnění

administrátora, tomuto problému se ale budeme věnovat za chviličku. Zkuste napsat s a zjistit tak

o daném serveru další informace. Po skončení experimentů napište quit nebo q a chod monitoru

tak ukončete.

Instalace

361

Podrobnější informace o serveru vyvoláte příkazem mysql -?. Ve výpisu si všimneme jednédůležité věci: za seznamem argumentů bývá obvykle něco jako Default options are read from the

following files in the given order:. Z řádků za touto frází zjistíme, kde se nacházejí konfigurační

soubory serveru MySQL; obvykle je to soubor /etc/my.cnf, i když v některých distribucích,například Ubuntu, se používá soubor /etc/mysql/my.cnf.

Stav běžícího serveru je možné zkontrolovat také příkazem mysqladmin:

$ mysqladmin –u root version

Z výsledků nejen ověříme, že je server správně spuštěný, ale také zjistíme číslo jeho verze.

Další velice užitečnou funkcí příkazu mysqladmin je ověření všech konfiguračních voleb běžícího serveru; k tomu slouží volba variables:

$ mysqladmin variables

Výsledkem příkazu bude dlouhý seznam přiřazených hodnot proměnných. Mezi nejužitečnější proměnné patří datadir (z té zjistíme, kam MySQL ukládá data) a have_innodb (ta obvykleobsahuje hodnotu YES a indikuje, jestli je podporováno úložiště typu InnoDB). MySQL podporuje totižcelou řadu typů úložišť (storage engines) neboli podkladových implementačních ovladačů pro

záznam či ukládání dat. Nejběžnějšími a také nejužitečnějšími jsou InnoDB a MyISAM, existují ale

i jiné, například paměťové úložiště Memory Engine, které vůbec nepoužívá trvalá záznamovázařízení, a úložiště CSV, které zapisuje do souborů s čárkami oddělenými hodnotami. Různá úložiště mají různé funkce a výkonnost. Pro obecné používání databází doporučujeme úložiště InnoDB, protože je rozumným kompromisem mezi výkonností a podporou vynucování relací mezijednotlivými datovými prvky. Nemáte-li podporu úložiště InnoDB zapnutou, podívejte se dokonfiguračního souboru /etc/my.cnf, na začátek řádku skip-innodb zapište znak komentáře # a pomocí

editoru služeb restartujte MySQL. Pokud ani toto nepomůže, možná máte verzi MySQL,zkompilovanou bez podpory InnoDB. V takovém případě najdete verzi s podporou InnoDB na webových stránkách MySQL. Pro účely této kapitoly nevadí, pokud budete používat alternativní úložištěMyISAM, které je ostatně v mnoha distribucích výchozí.

Jakmile bezpečně víte, že je součástí binárního kódu serveru i podpora InnoDB, musíte ho ještě určit za výchozí úložiště v konfiguračním souboru /etc/my.cnf, jinak se jako výchozí použije opět

MyISAM. Potřebné úpravy jsou velice jednoduché: do sekce mysqld přidejte řádek s textem

default-storage-engine=INNODB. Začátek souboru by měl po této úpravě vypadat třeba takto:

[mysqld]

default-storage-engine=INNOD

datadir=/var/lib/mysql

...

Po zbytek kapitoly předpokládáme, že je za výchozí úložiště určeno právě InnoDB.

V produkčním prostředí potřebujeme často také změnit výchozí umístění dat, určené hodnotou

proměnné datadir. I toto nastavení určíme v sekci mysqld konfiguračního souboru /etc/my.cnf.

Pokud se například rozhodnete používat úložiště InnoDB, ukládat data na svazek /vol02 asoubory protokolů na svazek /vol03 a datovému souboru přiřadit počáteční velikost 10 MB s možností

rozšíření, napíšeme do konfigurace řádky: Kapitola 8 – MySQL 362 innodb_data_home_dir = /vol02/mysql/data innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /vol03/mysql/logs Další podrobnosti a další možnosti konfigurace najdete v online manuálech na webovýchstránkách www.mysql.com.

Pokud se server nespustí nebo pokud se po jeho spuštění nemůžete připojit k databázi, přečtěte si

následující část o řešení problémů v instalaci.

Vzpomenete si ještě na tu bezpečnostní díru, o které jsme se zmínili o pár odstavců výš a díky které

se mohl každý bez hesla přihlásit jako administrátor root? Po prvotní konfiguraci bychom mělidatabázový systém lépe zabezpečit. Nenechte se mýlit, že se tento uživatel v instalaci MySQL nazývá

root – se superuživatelem root v Linuxu skutečně nemá nic společného a název root je v MySQL

pouze výchozím označením administrátora. Ani uživatelská ID obou účtů z MySQL a z Linuxunijak nesouvisí; MySQL má svoji vlastní, vestavěnou správu uživatelů a oprávnění. Podle výchozího

nastavení se ovšem k serveru MySQL může přihlásit každý, kdo má v dané linuxové instalaci účet,

a může se stát administrátorem. Jakmile tuto bezpečnostní díru odstraníme a oprávnění uživatele

root v MySQL zpřísníme – například povolíme pod root přihlášení jen lokálnímu uživateli anastavíme mu heslo – můžeme vytvořit i další uživatelské účty a oprávnění, které pro provoz konkrétní

aplikace potřebujeme.

Heslo administrátora root lze nastavit několika způsoby a nejsnáze pak takto:

$ mysqladmin –u root password novéheslo

Takto bude počáteční heslo účtu root rovno novéheslo.

S touto metodou je ale spojen jeden problém, protože heslo zůstane v podobě čistého textuzasáno v historii shellu, odkud si je kdokoli může zjistit, například při provádění našeho příkazu

zadáním příkazu ps, anebo vyloženě obnovením z historie shellu. Vhodnější metodou je protonastavit heslo z MySQL monitoru, a to příslušným příkazem SQL.

$ mysql –u root

Welcome to the MySQL monitor. Commands end with ; or g.

Your MySQL connection id is 4

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> SET password=PASSWORD('tajnéheslo');

Query OK, 0 rows affected (0.00 sec)

Vyberte samozřejmě jiné heslo než náš „vtipný“ text tajnéheslo – heslo byste měli znát jen vysami. Chcete-li někdy později heslo odstranit, stačí ve stejném příkazu zadat prázdné heslo.

Všimněte si, že jsme příkaz SQL ukončili středníkem (;). Tento znak není přesněji řečeno součástípříkazu SQL, ale pouze klientskému programu MySQL říká, že již požadujeme jeho provedení. Klíčová slova

jazyka SQL zapisujeme také velkými písmeny, například SET. To není nutné, protože syntaxe MySQL

povoluje klíčová slova velkými i malými písmeny, my ale tuto konvenci používáme nejen v knížce, ale

i v naší každodenní práci, protože kód SQL je takto lépe čitelný.


Instalace

363

Nyní se podíváme na tabulku oprávnění a zkontrolujeme, jestli bylo heslo nastaveno. Nejprve se

příkazem use přepneme na databázi mysql a poté provedeme dotaz do interních tabulek:

mysql> use mysql

mysql> SELECT user, host, password FROM user;

+------+-----------+------------------+

| user | host | password |

+------+-----------+------------------+

| root | localhost | 2dxf8e9c23age6ed |

| root | fc7blp4e | |

| | localhost | |

| | fc7blp4e | |

+------+-----------+------------------+

4 rows in set (0.01 sec)

mysql>

V předchozím příkazu jsme tedy vytvořili heslo uživatele root jen při připojení z počítače

localhost. MySQL umí totiž ukládat různá oprávnění nejen pro různé uživatele, ale i pro různétřídy připojení, odvozené od hostitelského názvu. Dalším krokem v zabezpečení naší instalace bude tedy odstranění uvedených nežádoucích uživatelských účtů, které jsou součástí výchozí instalace

MySQL. Takto z tabulky oprávnění odstraníme všechny uživatele kromě root:

mysql> DELETE FROM user WHERE user!= 'root';

Query OK, 2 rows affected (0.01 sec)

Druhým příkazem odstraníme jakékoli přihlášení uživatele root z jiného hostitele než localhost:

mysql> DELETE FROM user WHERE host!= 'localhost';

Query OK, 1 row affected (0.01 sec)

A konečně ve třetím příkazu zkontrolujeme, jestli v tabulce nejsou žádné nežádoucí uživatelské účty:

mysql> SELECT user, host, password FROM user;

+------+-----------+------------------+

| user | host | password |

+------+-----------+------------------+

| root | localhost | 2dxf8e9c23age6ed |

+------+-----------+------------------+

1 row in set (0.00 sec)

mysql>exit

Jak vidíme z výsledků, konečně máme v systému jen jediný přihlašovací účet root, který se navíc

smí přihlásit jen z localhost.

A teď přichází hodina pravdy: dokážete se stále přihlásit pod heslem, které jste původně zadali?

Tentokrát napíšeme parametr –p, který znamená, že MySQL musí vypsat výzvu k zadání hesla:

$ mysql –u root –p

Enter password: Kapitola 8 – MySQL 364 Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 7 Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql> Máme tedy běžící verzi MySQL, jejíž přístup je zablokován – k databázovému serveru se smípřipojit jen uživatel root pod dříve zadaným heslem, a navíc jen z počítače localhost. Při připojení

k MySQL můžeme heslo zadat také na příkazovém řádku, a to v parametru-assword, například - -password=tajnéheslo, nebo stručněji –ptajnéheslo; tento postup není ale příliš bezpečný,protože heslo je opět možné odhalit z příkazu ps nebo z historie shellu. Zápisu hesla na příkazovém

řádku se ale někdy nevyhneme, především při připojení k MySQL ze skriptů.

Dalším krokem je vrácení potřebného uživatele či uživatelů. Stejně jako v celém linuxovémsystému je i v MySQL krajně nevhodné provádět veškeré operace pod uživatelem root (pokud to není nezbytně nutné); vytvořte tedy účet běžného uživatele pro každodenní, normální používání. Jak jsme si již řekli, uživatelé mohou mít různá oprávnění při připojení z různých počítačů; vnašem příkladu má uživatel root z bezpečnostních důvodů povoleno jen přihlášení z lokálníhopočítače. Pro potřeby této kapitoly vytvoříme nyní nového uživatele rick, který bude mít poměrně

široká oprávnění. Konkrétně se bude moci připojit těmito třemi způsoby:

může se připojit z lokálního hostitele,

může se připojit z libovolného počítače s IP adresou v intervalu od 192.168.0.0 do

192.168.0.255,

může se připojit z libovolného počítače v doméně wiley.com.

Nejsnáze tohoto cíle dosáhneme bezpečným způsobem tak, že vytvoříme tři různé uživatele se

třemi různými cestami připojení. Každý z „uživatelů“ může mít dokonce jiné heslo, které tak platí

jen pro tu kterou síťovou adresu.

K vytvoření uživatelů a udělování oprávnění slouží příkaz grant, pomocí něhož nadefinujeme tři

zmíněné cesty připojení. Parametr IDENTIFIED BY je poněkud zvláštním výrazem pro zadánípočátečního hesla. Všimněte si zápisu apostrofů; ty uvádějte přesně jako v příkladu, jinak se uživatelé nevytvoří v souladu s našimi požadavky. 1. Vytvoříme lokální přihlášení uživatele rick:

mysql> GRANT ALL ON *.* TO rick@localhost IDENTIFIED BY 'tajnéheslo';

Query OK, 0 rows affected (0.03 sec)

2. Poté vytvoříme přihlášení, s nímž bude možné se připojit z libovolného systému v podsíti třídy

C o adrese 192.168.0. Nezapomeňte opět zapsat apostrofy, které zde uzavírají intervalpovolených adres IP adres definovaných maskou /255.255.255.0:

mysql> GRANT ALL ON *.* TO rick@'192.168.0.0/255.255.255.0'

IDENTIFIED BY 'tajnéheslo';

Query OK, 0 rows affected (0.00 sec)

3. Nakonec vytvoříme přihlášení, jehož prostřednictvím se rick bude moci připojit z libovolného

počítače v doméně wiley.com (a opět nezapomeneme zapsat apostrofy):


Instalace

365

mysql> GRANT ALL ON *.* TO rick@'%.wiley.com' IDENTIFIED BY 'tajnéheslo';

Query OK, 0 rows affected (0.00 sec) 4. A nyní se znovu podíváme do tabulky uživatelů a zkontrolujeme, jestli se všechny položkyvytvořily správně:

mysql> SELECT user, host, password FROM mysql.user;

+------+---------------------------+------------------+

| user | host | password |

+------+---------------------------+------------------+

| root | localhost | 2dxf8e8c17ade6ed |

| rick | localhost | 3742g6348q8378d9 |

| rick | %.wiley.com | 3742g6348q8378d9 |

| rick | 192.168.0.0/255.255.255.0 | 3742g6348q8378d9 |

+------+---------------------------+------------------+

4 rows in set (0.00 sec)

mysql> Výše uvedené příkazy i hesla musíte přirozeně změnit podle podmínek lokální konfigurace. Všimněte si zejména příkazu GRANT ALL ON *.*, který, jak jistě správně tušíte, dává uživateli rick neobyčejně silná

oprávnění. Pro zkušeného uživatele je to jistě v pořádku, ale pro běžného uživatele je to rozhodněnevhodné. O příkazu grant budeme v této kapitole hovořit v části „Vytváření uživatelů a udělování

oprávnění“, kde si mimo jiné ukážeme právě vytvoření běžného uživatele s omezenými oprávněními.

Tím by MySQL mělo být správně nainstalováno a spuštěno (není-li tomu tak, podívejte se donásledující části textu), instalace by měla být zabezpečena a měl by v ní být běžný uživatel různý od

root. Podíváme se tedy na řešení případných problémů po instalaci a poté se rychle vrátíme zpět

k základům administrace databází MySQL.

Řešení problémů po instalaci

Jestliže připojení po zadání příkazu mysql selhalo, zkontrolujte nejprve systémovým příkazem ps,

jestli proces serveru správně běží. Pokud jej ve výpise nenajdete, zkuste zadat příkaz mysql_safed

–log. Ten zapíše do adresáře protokolů MySQL soubor s jistými doplňujícími informacemi. Můžete

se také pokusit o přímé spuštění procesu mysqld; úplný seznam voleb příkazového řádku vyvoláte

příkazem mysqld --verbose --help.

Je také možné, že sice server správně běží, ale že jednoduše odmítnul naše připojení. V takovémpříadě musíme jako další věc zkontrolovat přítomnost databází, zejména pak výchozí databáze MySQL

s oprávněními. V distribucích Red Hat se běžně používá výchozí umístění /var/lib/mysql, v jiných

distribucích to ale může být i jinde. Podívejte se proto do spouštěcího skriptu MySQL (například

v adresáři /etc/init.d) a do konfiguračního souboru /etc/my.cnf. Další možnost je vyvolatprogram přímo, a to příkazem mysqld --verbose, a hledat zde proměnnou datadir. Po nalezeníadresáře s databází zkontrolujeme, jestli je v ní přítomna přinejmenším výchozí databáze oprávnění

(s názvem mysql) a že démon serveru toto umístění skutečně používá (je zadáno v souboru my.cnf).

Pokud se ani po tomto pokusu nepodaří připojit, zkuste pomocí editoru služeb zastavit server,dále zkontrolujte, jestli už neběží žádný proces mysqld, a poté jej restartujte a připojte se znovu.

A pokud selže i tento pokus (jakkoli je to nepravděpodobné), můžete ještě sáhnout k poslednímebr />

Kapitola 8 – MySQL

366

todě, a sice odinstalovat MySQL a nainstalovat je celé znovu. Velmi užitečná je také dokumentace

MySQL, kterou najdete na webových stránkách MySQL (je vždy aktuálnější než lokální manuálové

stránky a navíc v ní najdete různé rady od uživatelů a disku sní fórum) a ve které se můžete podívat

na řešení méně obvyklých problémů.

Administrace MySQL

Administraci MySQL usnadňuje několik pomocných programů, které jsou součástí jeho distribuce.

Nejběžněji používaným je přitom program mysqladmin, kterému se spolu s jinými utilitamivěnujeme na následujících řádcích.

Příkazy

Všechny příkazy MySQL s výjimkou příkazu mysqlshow přebírají nejméně tyto tři standardní parametry:

Volba příkazu Parametr Popis

-u uživjméno Jako výchozí hodnotu se všechny utility MySQL pokoušejípoužít uživjméno MySQL shodné s aktuálním uživatelskýmjménem systému Linux. V parametru –u můžeme nicméně zadat

jiné uživatelské jméno.

-p [heslo] Zadáme-li volbu –p bez řetězce hesla, vypíše se výzva k jeho

zadání. Není-li parametr –p zadán vůbec, předpokládajípříkazy MySQL, že žádné heslo není potřeba.

-h hostitel Slouží pro připojení k serveru na jiném hostiteli (u lokálního

serveru je možné vždy vynechat).

Ještě jednou doporučujeme rozhodně nezapisovat heslo na příkazový řádek, protože takto jeviditelné ve výpisu ps.

Utilita myisamchk

Posláním utility myisamchk je kontrolovat a opravovat datové tabulky ve výchozím formátu tabulek

MyISAM, který MySQL nativně podporuje, Normálně je třeba spouštět tuto utilitu pod uživatelským

účtem mysql, vytvořeným při instalaci, a to z adresáře, v němž jsou tabulky umístěny. Při kontroledatabáze tedy zadejte příkaz su mysql, přejděte do adresáře, jehož název je shodný s názvem databáze,

a poté vyvolejte příkaz myisamchk s jednou nebo více volbami podle následující tabulky. Například:

myisamchk –e –r *.MYI

Nejběžněji používané volby příkazu myisamchk shrnuje stručná tabulka:

Volba příkazu Popis

-c Zkontrolovat chyby v tabulce.

-e Provést rozšířené kontroly.

-r Opravit nalezené chyby.

Administrace MySQL

367

Podrobnější informace zjistíte v rozsáhlé nápovědě, kterou vyvoláte spuštěním příkazu myisamchk

bez parametrů. Nad tabulkami typu InnoDB neprovádí utilita žádné operace.

Utilita mysql

Nejdůležitější a zároveň nejsilnější nástroj příkazového řádku v databázi MySQL, který umožňuje

provádění téměř jakéhokoli úkonu na úrovni administrátora i běžného uživatele. Nástroj mysql

můžete spustit z příkazového řádku, a pokud do něj zadáte v posledním parametru názevdatabáze, nemusíte z monitoru zvlášť zadávat příkaz use <databáze>. Tímto příkazem spustíme například

monitor pod uživatelem rick, požádáme o výzvu k zadání hesla (všimněte si mezery za volbou –p)

a jako výchozí použijeme databázi foo:

$ mysql –u rick –p foo

Příkazem mysql --help | less vypíšeme po stránkách seznam dalších voleb příkazového řádku

v monitoru mysql.

Spustíte-li MySQL bez zadání databáze, můžete konkrétní databázi vybrat zmíněným příkazem use

<názevdatabáze> z MySQL, jak ostatně vidíte ze seznamu příkazů v následující tabulce.

Druhá možnost je spustit utilitu mysql v neinteraktivním režimu, příslušné příkazy zadat dovstupního souboru a ten nechat z příkazového řádku načíst. V takovém případě nezbývá, než zapsat

heslo na příkazovém řádku:

$ mysql –u rick-assword=tajnéheslo foo < sqlcommands.sql

Jakmile mysql přečte a zpracuje všechny příkazy zadané v souboru, vrátíme se zpět do výzvypříkazového řádku.

Pokud je klient mysql připojen k serveru, můžeme kromě standardní množiny SQL92 zadat také

řadu podporovaných speciálních příkazů, které shrnuje následující tabulka:

Příkaz Alternativní

zkrácená forma

Popis

help nebo ? h nebo ? Vypíše seznam příkazů.

edit e Editace příkazu. Konkrétní editor je určen

z proměnné prostředí $EDITOR.

exit nebo quit q Ukončí klienta MySQL.

go g Spustí provedení příkazu.

source <názevsouboru> . Provede příkazy SQL ze zadaného souboru.

status s Vypíše stavové informace o serveru.

system <příkaz> ! Provede systémový příkaz.

tee <názevsouboru> T Kopii veškerého výstupu připojí na konec

souboru se zadaným názvem.

use <databáze> u Použije určenou databázi. Velmi důležitým příkazem z této tabulky je příkaz use. Server (démon) mysqld podporuje totižpráci s mnoha různými databázemi, které ale obsluhuje a spravuje jediný serverový proces. U mnoha Kapitola 8 – MySQL 368 jiných databázových serverů, jako je Oracle nebo Sybase, se používá pojem schéma, zatímco

v MySQL se setkáme s výrazem databáze. (Nástroj Query Browser v MySQL zná ale naopakschéma.) Každá databáze – ve smyslu databáze MySQL – je z velké části nezávislá množina tabulek. To

znamená, že pro různé účely můžeme snadno vytvořit mnoho různých databází a k těmto různým

databázím přiřadit různé uživatele; jejich efektivní správu bude přesto zajišťovat jeden stejnýdatabázový server. Příkazem use se pak (za předpokladu příslušných oprávnění) mezi těmitodatabázemi přepínáme.

Speciální databáze mysql, vytvořená automaticky v každé instalaci MySQL, slouží jako hlavníúložiště dat, jako jsou uživatelé a oprávnění.

SQL92 je nejčastěji používanou verzí normy ANSI SQL. Jejím úkolem je vytvořit jednotnou podobu

databází SQL a umožnit vzájemnou spolupráci a komunikaci i mezi různými databázovými produkty.

Utilita mysqladmin

Tato utilita je nejdůležitějším nástrojem pro rychlou administraci databází MySQL. Kroměobvyklých parametrů podporuje také následující hlavní příkazy:

Příkaz Popis

create <název_databáze> Vytvoří novou databázi.

drop <název_databáze> Odstraní databázi.

password <nové_heslo> Změní heslo (ukázka viz výše).

ping Zkontroluje, jestli server běží (je „naživu“).

reload Znovu načte tabulky s udělenými oprávněními.

status Vypíše stav serveru.

shutdown Ukončí chod serveru.

variables Zobrazí proměnné, které kontrolují činnost MySQL, spolu

s jejich aktuálními hodnotami.

version Uvádí číslo verze serveru a dobu, po kterou je již spuštěný. Při spuštění z příkazového řádku bez parametrů vypíše příkaz mysqladmin úplný seznam voleb; k takovému příkazu je vhodné dopsat | less. Utilita mysqlbug Při troše štěstí byste nemuseli tuto utilitu nikdy používat. Jak již název napovídá, vytvoří tentonástroj zprávu s chybami, která se e-mailem odešle týmu údržby MySQL. Před odesláním můžetevygenerovaný soubor upravit a doplnit do něj další informace, jež mohou být pro vývojáře užitečné. Utilita mysqldump Neobyčejně užitečná utilita, která umožňuje provádět výpis celé databáze nebo její části dojediného souboru, a to ve tvaru příkazů SQL, jež můžeme později znovu načíst jak do MySQL, tak i do jiné relační databáze SQL. Kromě standardních parametrů s uživatelským jménem a heslem přebírá

také název databáze a tabulky. Možnosti nástroje dále rozšiřují následující volby:


Administrace MySQL

369

Příkaz Popis

--add-drop-table Do výstupního souboru přidá příkazy SQL, nezbytné pro odstraněnítabulek; teprve za nimi následují příkazy pro vytvoření nových tabulek.

-e Bude se používat rozšířená syntaxe vkládání. Tato syntaxe nenístandardním SQL, ale při výpisu velkého množství dat se mohou později do

MySQL načíst mnohem rychleji.

-t Výpisu podléhají jen data v tabulkách, nikoli příkazy a informace nutné

pro vytvoření tabulek.

-d Výpisu podléhají jen struktury tabulek, nikoli vlastní data. Při výchozím nastavení odesílá nástroj mysqldump výsledky na standardní výstup, který pakmůžeme přesměrovat do souboru, Utilita je šikovná například při převodu (migraci) dat nebo při rychlém zálohování a díkyimplementaci architektury klient/server v MySQL s ní můžeme dokonce realizovat vzdálené zálohování,

pokud je klient mysqldump nainstalován na jiném počítači. Jako příklad si uvedeme příkaz, který se

připojí jako rick a vypíše databázi myplaydb:

$ mysqldump –u rick –p myplaydb > myplaydb.dump

V našem systému měla tato databáze jen jedinou tabulku a výsledný soubor vypadal tudíž takto:

-- MySQL dump 10.11

--- Host: localhost Database: myplaydb

--------------------------------------------------------- Server version 5.0.37

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--- Table structure for table 'children'

-DROP TABLE IF EXISTS 'children';

CREATE TABLE 'children' (

'childno' int(11) NOT NULL auto_increment,

'fname' varchar(30) default NULL,


Kapitola 8 – MySQL

370

'age' int(11) default NULL,

PRIMARY KEY ('childno')

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--- Dumping data for table 'children'

-LOCK TABLES 'children' WRITE;

/*!40000 ALTER TABLE 'children' DISABLE KEYS */;

INSERT INTO 'children' VALUES

(1,'Jenny',21),(2,'Andrew',17),(3,'Gavin',8),(4,'Duncan',6),(5,'Emma',4),

(6,'Alex',15),(7,'Adrian',9);

/*!40000 ALTER TABLE 'children' ENABLE KEYS */;

UNLOCK TABLES;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2007-06-22 20:11:48

Utilita mysqlimport

Nástroj mysqlimport slouží k hromadnému načítání neboli importu dat do tabulky. Takto můžeme

ze vstupního souboru načíst velké množství dat v textovém formátu. Jedinými povinnýmiparametry jsou název souboru a název databáze; v cílové databázi načte příkaz data do tabulky, jejíž název

je shodný s názvem vstupního souboru (bez přípony). Textový soubor musí mít při importu stejný

počet sloupců jako cílová tabulka a také jejich datové typy musí být kompatibilní. Výchozímoddělovačem dat je tabulátor.

Z textového souboru je možné načítat také příkazy SQL k provedení; stačí spustit příkaz mysql

a vstup u něj přesměrovat ze souboru, jak jsme si ukázali dříve.

Utilita mysqlshow

Tato utilita vypisuje stručné informace o instalaci MySQL a jeho podřízených databázích:

Bez parametrů vypisuje všechny dostupné databáze.

Zadáme-li v parametru databázi, vypíše všechny tabulky v databázi.

Zadáme-li název databáze a tabulky, vypíše všechny sloupce z tabulky.

A pokud zadáme název databáze, tabulky a sloupce, uvede detailní informace o sloupci.

Administrace MySQL

371

Vytváření uživatelů a udělování oprávnění

Jako administrátor MySQL budete mít na starosti mimo jiné údržbu uživatelů, tedy přidávání aodstraňování uživatelů z MySQL a řízení jejich oprávnění. Od verze MySQL 3.22 se pro správuuživatelských oprávnění používají příkazy grant a revoke, které zadáváme z MySQL monitoru – zde jsou tyto

operace jistě jednodušší než ruční editace tabulek s oprávněními ve starších verzích MySQL.

Příkaz grant

Příkaz grant zhruba (nikoli však úplně) odpovídá syntaxi SQL92. Obecný formát vypadá takto:

grant <oprávnění> on <objekt> to <uživatel>

[identified by heslo-uživatele] [with grant option];

Takto je možné přidělit několik typů <oprávnění>, které shrnuje následující tabulka:

Hodnota Popis

alter Oprávnění měnit tabulky a indexy.

create Vytvářet databáze a tabulky.

delete Odstraňovat data z databáze.

drop Odstraňovat databáze a tabulky.

index Provádět správu indexů.

insert Přidávat (vkládat) data do databáze.

lock tables Definovat uzamykání souborů.

select Načítat (vybírat) data.

update Modifikovat (aktualizovat) data.

all Všechna výše popsaná oprávnění. Některé příkazy mají další volby; parametr create view dává například uživateli oprávnění kvytváření pohledů. Úplný seznam oprávnění je nejlepší najít v dokumentaci ke konkrétní verzi MySQL,

protože se s každou novou verzí MySQL mění. Existují také speciální oprávnění proadministrátory, kterým se zde ale věnovat nebudeme.

Objekt, nad nímž budeme oprávnění udělovat, identifikujeme zápisem

názevdatabáze.názevtabulky

přičemž ve shodě s linuxovými „tradicemi“ znamená znak * cokoliv, takže *.* jsou všechnyobjekty ve všech databázích a foo.* všechny objekty v databázi foo.

Pokud již zadaný uživatel existuje, oprávnění se upraví podle požadovaných změn. Jestližeuživatel neexistuje, vytvoří se jako nový a přiřadí se mu nová oprávnění. Jak jsme si ukázali, uživatele je

možné zadat s tím, že se má přihlásit z konkrétního hostitelského počítače; stejný zápis můžeme

využít i při zadávání oprávnění a využijeme tak plnou flexibilitu schématu MySQL pro oprávnění.

V syntaxi jazyka SQL se jako zástupný symbol používá znak % a má tedy podobný význam jako *

v shellovém prostředí. Pro každé udělované oprávnění můžeme samozřejmě napsat samostatný

příkaz, ale pokud se například rozhodneme udělit uživateli rick oprávnění přístupu z libovolného

počítače v doméně wiley.com, vyjádříme uživatele jako:

rick@'%.wiley.com'


Kapitola 8 – MySQL

372

Jakýkoli zápis znaku * je nutné uvést do apostrofů, které jej tak oddělují od literálového textu.

Při řízení přístupu je možné zadat také síťovou adresu ve tvaru IP adresa/maska podsítě

(N.N.N.N/M.M.M.M).

Už v předchozím příkladu jsme viděli, že zápisem rick@'192.168.0.0/255.255.255.0' udělíme

uživateli rick právo přístupu z libovolného počítače v lokální síti; tvar rick@'192.168.0.1' pak

znamená, že je jeho přístup omezen jen na jedinou pracovní stanici, a naopak výraz

rick@'192.0.0.0/255.0.0.0' rozšiřuje přístup na libovolný počítač v síti třídy A s číslem 192.

A ještě jeden příklad: mysql> GRANT ALL ON foo.* TO rick@'%' IDENTIFIED BY 'bar'; Tento příkaz udělí uživateli rick při zadání počátečního hesla bar a při připojení z libovolného počítače úplná oprávnění nad databází foo. Pokud v tomto příkazu databáze foo neexistuje, bude mít uživatel rick oprávnění ji vytvořitpříkazem jazyka SQL, create database. Klauzule IDENTIFIED BY je nepovinná, obecně je však vhodné přiřadit každému uživateli conejdříve po vytvoření účtu i heslo. Velký pozor si musíte dávat v jednom nešťastném případě, a sice když uživatelská jména,hostitelské názvy nebo názvy databází obsahují podtržení _ – tento znak se totiž v jazyce SQL shoduje slibovolným jednotlivým znakem, podobně jako % definuje shodu s řetězcem znaků. Pokud možno

se tedy znaku podtržení v uživatelských jménech a názvech databází vyhýbejte.

Volbu with grant option používáme zpravidla jen pro vytvoření sekundárního administrátora;

obecně ale znamená, že nově vytvořený uživatel může svá oprávnění propůjčovat i jinýmuživatelům. S volbou with grant option zacházejte proto opatrně. Příkaz revoke Administrátor má přirozeně právo nejen udělovat, ale také odebírat oprávnění. K tomu sloužípříkaz revoke: revoke <oprávnění> on <objekt> from <uživatel> Formát je z velké části podobný příkazu grant, například: mysql> REVOKE INSERT ON foo.* FROM rick@'%'; Příkaz revoke neumí ale odstranit uživatele. Chcete-li nějaký uživatelský účet úplně smazat, nestačí

jednoduše upravit jeho oprávnění, ale nejprve mu příkazem revoke zrušte všechna oprávnění a poté jej smažte z tabulky user v interní databázi mysql: mysql> use mysql mysql> DELETE FROM user WHERE user = "rick" mysql> FLUSH PRIVILEGES; Protože jsme zde neurčili hostitelský počítač, odstraníme tímto příkazem všechny instance daného

uživatele MySQL (zde rick). Po dokončení se nezapomeňte příkazem use vrátit k původnídatabázi, jinak můžete neúmyslně pokračovat v práci nad interní databází MySQL.


Administrace MySQL

373

Uvědomte si, že příkaz delete patří do jiné skupiny než příkazy grant a revoke. Je to běžný příkaz

SQL a my jím odstraňujeme záznamy z „běžné“ tabulky – tímto způsobem totiž MySQL obsluhuje

oprávnění. Pro dosažení potřebných změn musíme skutečně přímo aktualizovat tabulky oprávnění

MySQL (a proto jsme také nejprve napsali příkaz use mysql).

Po aktualizaci tabulek musíme provést příkaz FLUSH PRIVILEGES, kterým serveru MySQL nařídíme

opětovné načtení tabulek oprávnění. Hesla Chcete-li zadat hesla stávajícím uživatelům, kteří je ještě nemají, nebo chcete-li svoje vlastní heslo či heslo jiného uživatele změnit, musíte se k serveru MySQL připojit jako root a přímo aktualizovat

informace o uživateli. Například:

mysql> use mysql

mysql> SELECT host, user, password FROM user;

Dostaneme zhruba takovýto výsledek:

+-----------+----------+------------------+

| host | user | password |

+-----------+----------+------------------+

| localhost | root | 67457e226a1a15bd |

| localhost | foo | |

+-----------+----------+------------------+

2 rows in set (0.00 sec)

Tímto příkazem můžeme uživateli foo přiřadit heslo bar:

mysql> UPDATE user SET password = password('bar') WHERE user = 'foo';

Pro kontrolu můžeme nyní znovu vypsat příslušné sloupce z tabulky user:

mysql> SELECT host, user, password FROM user;

+-----------+----------+------------------+

| host | user | password |

+-----------+----------+------------------+

| localhost | root | 65457e236g1a1wbq |

| localhost | foo | 7c9e0a41222752fa |

+-----------+----------+------------------+

2 rows in set (0.00 sec)

mysql>

Vidíme, že uživatel foo již skutečně má heslo. Nezapomeňte se vrátit zpět k původní databázi.

Ve verzi MySQL 4.1 se schéma ukládání hesel oproti starším verzím změnilo. Z důvodu zpětné

kompatibility je nicméně zachována i možnost změny hesla pomocí starého algoritmu, který vpříadě potřeby vyvoláme pomocí funkce OLD_PASSWORD('nové heslo').


Kapitola 8 – MySQL

374

Vytvoření databáze

Naším dalším krokem bude vytvoření databáze. Dejme tomu, že se bude nazývat rick – a jak sijistě vzpomínáte, v systému je již uživatel stejného jména. Nejprve uživateli rick udělíme široká

oprávnění, aby tak mohl především vytvářet nové databáze. Toto oprávnění je velice užitečné

zejména na vývojovém systému, protože pro vývojáře znamená vysokou flexibilitu:

mysql> GRANT ALL ON *.* TO rick@localhost IDENTIFIED BY 'tajnéheslo'

Poté si správnost oprávnění vyzkoušíme – přihlásíme se jako rick a vytvoříme novou databázi:

$ mysql –u rick –p

Enter password:

...

mysql> CREATE DATABASE rick;

Query OK, 1 row affected (0.01 sec)

mysql>

Nyní požádáme MySQL o přepnutí pod novou databázi:

mysql> use rick

A dále již můžeme do databáze naplnit tabulky a všechny požadované informace. Při dalšímpřihlášení můžeme na konec příkazového řádku zadat název databáze a tím si „ušetřit“ zápis příkazu use:

$ mysql –u rick –p rick

Po zadání správného hesla (na výzvu) se automaticky ocitneme v databázi rick.

Datové typy

Server MySQL se tedy správně rozběhl, uživateli jsme nadefinovali bezpečné přihlášení a vytvořili jsme i databázi. Co dál? Nyní musíme v databázi vytvořit tabulky se sloupci, do nichž budemezapisovat vlastní data. K tomu se ale nejprve musíme seznámit s datovými typy, které MySQL podporuje. Datové typy v MySQL jsou poměrně standardní, takže se stručně podíváme jen na ty nejdůležitější.

Jako vždy najdete detailní informace v manuálu na webových stránkách MySQL.

Logický typ

Sloupec logického neboli booleovského typu definujeme pomocí klíčového slova BOOL. Jak si jistě sami domyslíte, může obsahovat hodnoty TRUE a FALSE (pravda a nepravda); třetí hodnotou jespeciální „neznámá“, NULL.

Znakové typy

MySQL nabízí několik znakových typů, které shrnuje následující tabulka. První tři jsou standardní,

zbývající tři jsou pak speciální typy MySQL. Doporučujeme přitom se pokud možno držetstandardních typů.


Administrace MySQL

375

Definice Popis

CHAR Jednotlivý znak.

CHAR(N) Znakový řetězec v délce přesně N znaků; kratší řetězec se zpravadoplní mezerami. Maximální délka 255 znaků.

VARCHAR(N) Pole proměnné délky s N znaky. Maximální délka 255 znaků.

TINYTEXT Podobné jako VARCHAR(N).

MEDIUMTEXT Textový řetězec obsahující až 65 535 znaků.

LONGTEXT Textový řetězec obsahující až 2

32

– 1 znaků.

Číselné typy

Všechny číselné typy můžeme dále rozdělit na celočíselné a na reálné typy s pohyblivou řádovou

čárkou (podle následující tabulky):

Definice Typ Popis

TINYINT Celočíselný 8bitový datový typ.

SMALLINT Celočíselný 16bitový datový typ.

MEDIUMINT Celočíselný 24bitový datový typ.

INT Celočíselný 32bitový datový typ. Jedná se o standardní datový typ,

vhodný pro obecné použití.

BIGINT Celočíselný 64bitový datový typ se znaménkem.

FLOAT(P) Reálný Číslo s pohyblivou řádovou čárkou a nejméně Pčíslicemi přesnosti.

DOUBLE(D, N) Reálný Číslo s pohyblivou řádovou čárkou ve dvojnásobné

přesnosti se znaménkem, s D číslicemi a N desetinnými

místy.

NUMERIC(P, S) Reálný Reálné číslo s celkem P číslicemi, z toho S číslic zadesetinnou čárkou. Na rozdíl od typu DOUBLE se jedná opřesné číslo, takže se hodí například pro ukládání peněžních

údajů; na druhé straně se zpracovává méně efektivně.

DECIMAL(P, S) Reálný Synonymum pro NUMERIC. Obecně doporučujeme držet se datových typů INT, DOUBLE a NUMERIC, protože se nejvíce blížístandardním datovým typům SQL. Ostatní typy jsou nestandardní a v jiných databázových systémechnemusí být k dispozici, takže následný převod databáze do jiného prostředí může znamenat problémy.

Kapitola 8 – MySQL

376

Časové typy

K dispozici máme také pět datových typů pro údaje s datem a časem:

Definice Popis

DATE Umožňuje uložení data od 1. ledna 1000 do 31. prosince 9999.

TIME Umožňuje uložení času od –838:59:59 do 838:59:59.

TIMESTAMP Slouží k uložení časového razítka od 1. ledna 1970 do roku 2037.

DATETIME Umožňuje uložení data a času od 1. ledna 1000 do poslední sekundy 31.

prosince 9999.

YEAR Slouží k uložení čísla roku. Dvouciferným hodnotám roku se vyhýbejte,

protože nejsou jednoznačné a automaticky se převádějí na čtyřciferný rok.

Dávejte pozor zejména při porovnávání hodnot typu DATE a DATETIME, protože každý pracuje jiným

způsobem s časovou částí; výsledky porovnání mohou být neočekávané. Podrobné informacenajdete opět v manuálu k MySQL, protože popsané chování se u různých verzí MySQL mírně liší.

Vytvoření tabulky

Databázový server nám běží, umíme přiřazovat uživatelská oprávnění a víme, jak vytvářet databáze a některé základní datové typy; můžeme se tedy podívat na další téma, a sice vytváření tabulek. Tabulka v databázi není nic jiného než posloupnost řádků, z nichž každý se skládá z pevnědefinované množiny sloupců. Trochu se podobá tabulkovému sešitu, ale každý řádek zde musí mít stejný počet sloupců stejného typu, a navíc se každý řádek musí alespoň nějak odlišovat od všech

ostatních řádků tabulky.

Databáze může obsahovat (v rozumných mezích) prakticky neomezený počet tabulek. Jenmálokdy budeme ale v jedné databázi potřebovat více než 100 tabulek a u většiny malých databází si

obvykle vystačíme s méně než čtvrtinou.

Úplná syntaxe příkazů SQL pro vytváření databázových objektů, kterým se souhrnně říká DDL

(Data Definition Language, jazyk pro definici dat), je příliš složitá, než aby se nám vešla do textutéto kapitoly, a proto vás pro podrobné informace opět odkážeme do dokumentace z webových

stránek MySQL.

Základní syntaxe pro vytvoření tabulky vypadá takto:

CREATE TABLE <název_tabulky> (

sloupec typ [NULL | NOT NULL] [AUTO_INCREMENT] [PRIMARY KEY]

[, ...]

[, PRIMARY KEY (sloupec [, ...])]

)

Nepotřebnou tabulku můžeme odstranit velice jednoduchým příkazem DROP TABLE:

DROP TABLE <název_tabulky>

Do příkazu pro vytváření tabulek můžeme zadat celou řadu dalších klíčových slov, z nichž si

nyní ukážeme ty nejdůležitější, které nám při práci hodně pomohou.


Administrace MySQL

377

Klíčové slovo Popis

AUTO_INCREMENT Toto speciální klíčové slovo říká, že kdykoli do tohoto sloupcezapíše

me hodnotu NULL, doplní MySQL automaticky jeho hodnotu podleau

tomaticky inkrementovaného čísla. Jedná se o velice užitečnou funkci,

protože MySQL za nás takto automaticky přiřadí jedinečné číslokaždé

mu řádku tabulky; výraz je ale možné použít jen u sloupců, které jsou

zároveň primárním klíčem. V jiných databázích zajišťuje podobnou

funkci sériový číselný typ, automatické číslo nebo explicitně definovaná

posloupnost.

NULL Zvláštní databázová hodnota, která normálně vyjadřuje „neznámou“

hodnotu, často ale znamená také „hodnota nemá smysl“. Dejme tomu,

že například vyplňujeme tabulku s informacemi o zaměstnancích, kde je

sloupec pro osobní e-mailovou adresu, ale někteří zaměstnanci zkrátka

osobní e-mail nemají. V takovém případě zapíšeme do sloupce hodnotu

NULL a vyjádříme tak, že hodnota u daného zaměstnance nemá smysl.

Zápis NOT NULL znamená, že do sloupce nelze zapsat hodnotu NULL

a můžeme s ním zabránit v ukládání hodnot NULL – jinými slovy,tako

váto hodnota musí být vždy známá, například příjmení zaměstnance.

PRIMARY KEY Indikuje, že data tohoto sloupce budou jedinečná a že se v nich tedy

každý řádek bude lišit od všech ostatních řádků tabulky. Každá tabulka

může mít jen jeden primární klíč.

Vyzkoušejte Vytvoření tabulky a vložení dat

Praktické vytvoření tabulky je naštěstí mnohem snazší, než se učit popsanou základní syntaxi,tak

že si zkusíme společně vytvořit tabulku s názvem children, v níž bude ke každému dítěti uloženo

jedinečné číslo, křestní jméno a věk. Číslo dítěte bude zároveň primárním klíčem.

1. Potřebný příkaz SQL vypadá takto:

CREATE TABLE children (

childno INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,

fname VARCHAR(30),

age INTEGER

);

Všimněte si, že na rozdíl od většiny běžných programovacích jazyků se název sloupce (childno)

zapisuje před příslušný typ sloupce (INTEGER).

2. Primární klíč je možné definovat také jiným zápisem, odděleně od vlastní definice sloupce;po

dívejme se na tuto alternativní syntaxi v následující interaktivní relaci:

mysql> use rick

Database changed

mysql> CREATE table children (

-> childno INTEGER AUTO_INCREMENT NOT NULL,


Kapitola 8 – MySQL

378

-> fname varchar(30),

-> age INTEGER,

-> PRIMARY KEY(childno)

->);

Query OK, 0 rows affected (0.04 sec)

mysql>

Všimněte si zápisu příkazu SQL přes několik řádků: MySQL nám pomocí výzvy -> naznačí, že

se nacházíme na pokračovacím řádku. Dále si všimněte ukončení příkazu středníkem, okterém jsme se už zmínili a kterým databázovému serveru říkáme, že může zahájit zpracovánínašeho požadavku.

V případě chyby můžeme v MySQL procházet předchozí příkazy, upravit je a znovu je zadat ke

zpracování prostým stiskem Enter.

3. V tabulce máme tedy tabulku a nyní do ní zkusíme vkládat data. K tomu slouží v jazyce SQL

příkaz INSERT. Protože sloupec childno jsme definovali jako AUTO_INCREMENT, neuvádíme u něj žádné konkrétní hodnoty, ale jedinečné číslo v něm přiřadí sám MySQL. mysql> INSERT INTO children(fname, age) VALUES("Jenny", 21); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO children(fname, age) VALUES("Andrew", 17); Query OK, 1 row affected (0.00 sec)

Správnost vložení dat zkontrolujeme tak, že je z databáze zkusíme přečíst. Nad tabulkoutedy provedeme příkaz SELECT:

mysql> SELECT childno, fname, age FROM children;

+---------+--------+------+

| childno | fname | age |

+---------+--------+------+

| 1 | Jenny | 21 |

| 2 | Andrew | 17 |

+---------+--------+------+

2 rows in set (0.00 sec)

mysql> Namísto úplného seznamu požadovaných sloupců můžeme zadat také zkratku *, která znamená výpis všech sloupců příslušné tabulky. Pro interaktivní účely je tento zápis velice šikovný, ale vostrém, produkčním systému uvádějte jednotlivé sloupce vždy explicitně.

Jak příklad funguje

V příkladu jsme zahájili interaktivní relaci k databázovému serveru a přepnuli jsme se do databáze

rick. Poté jsme napsali příkaz SQL pro vytvoření tabulky, přičemž jsme jej na obrazovce rozdělili

do většího počtu řádků. Po ukončení příkazu SQL středníkem ; vytvořil MySQL požadovanoutabulku. Poté jsme příkazem INSERT vložili data, přičemž ve sloupci childno jsme ponechaliautomaticky přiřazená čísla. Nakonec jsme příkazem SELECT vybrali a zobrazili data z tabulky.


Administrace MySQL

379

Na detailní rozbor jazyka SQL, který se víceméně týká návrhu databází, už není v této kapitolemísto. Podrobnější informace najdete například na webových stránkách www.mysql.com. Případnědooručujeme knihu SQL Kompletní průvodce (Computer Press, 2005).

Grafické nástroje

Manipulace s tabulkami a daty na příkazovém řádku je sice v pořádku, ale dnes hodně lidípreferuje raději grafické nástroje.

MySQL má dva nejdůležitější grafické nástroje, a sice MySQL Administrator a MySQL Query Browser. Přesný název balíku k těmto nástrojům se liší podle konkrétní použité distribuce; vsystému Red Hat hledejte například balíky mysql-gui-tools a mysql-administrator a v distribuci

Ubuntu se nejprve podívejte do úložiště „Universe“ a potom vyhledejte balík mysql-admin.

MySQL Query Browser

Nástroj Query Browser neboli „prohlížeč dotazů“ je docela jednoduchý, ale mimořádně efektivní.

Po instalaci jej můžeme vyvolat z grafické nabídky; po spuštění se objeví prvotní obrazovka sdotazem na spojovací informace, jak vidíme na obrázku 8.4.

Obrázek 8.4

Pokud jste nástroj spustili na stejném počítači, kde běží i server, napište místo hostitelského názvu

localhost.

Po vlastním připojení se objeví jednoduché grafické rozhraní podle obrázku 8.5, z něhož můžeme

spouštět dotazy v grafickém shellu; můžeme zde tedy využít možností grafické editace dotazu,dále grafické editace dat tabulky a také obrazovek s nápovědou a syntaxí příkazů SQL.

MySQL Administrator

Nástroj MySQL Administrator rozhodně nenechávejte ležet stranou, protože představuje velicesilné, stabilní a snadno použitelné grafické rozhraní k systému MySQL, předem zkompilované pro

platformy Linux a Windows (k dispozici je i zdrojový kód, pokud byste chtěli). Umožňujeadministraci serveru MySQL a provádění příkazů SQL z grafického rozhraní.


Kapitola 8 – MySQL

380

Obrázek 8.5

Obrázek 8.6 Po spuštění MySQL Administratoru se objeví připojovací obrazovka podobná úvodní obrazovce MySQL Query Browseru. Po zadání potřebných informací se dostaneme na hlavní ovládacístránku, která je na obrázku 8.6.


Přístup k datům MySQL z jazyka C

381

Chcete-li provádět administraci serveru MySQL z klienta Windows, můžete si z webových stránek

MySQL, ze sekce grafických nástrojů stáhnout verzi MySQL Administratora pro Windows. V době

vzniku této knihy zde byl k dispozici Administrator, Query Browser a utilita pro převod (migraci)

databází. Stavová obrazovka je na obrázku 8.7; jak vidíte, je téměř totožná s linuxovou verzí.

Obrázek 8.7

Pamatujte si, že pokud jste postupovali podle instrukcí pro zabezpečení serveru MySQL, může se

root připojit jen z lokálního počítače localhost, nikoli z jiných počítačů v síti.

Jakmile nástroj MySQL Administrator běží, můžete se v něm podívat na různé možnostikonfigura

ce a monitorování systému. Práce s nástrojem je velice jednoduchá, ale my se mu v této kapitole již

podrobněji věnovat nebudeme.

Přístup k datům MySQL z jazyka C

Základy MySQL jsme zvládli a nyní se můžeme pustit do přístupu k datům z aplikací, nikoli zgra

fických nástrojů či ze základního klienta mysql.


Kapitola 8 – MySQL

382

K databázím MySQL je možné přistupovat z mnoha různých programovacích jazyků, například:

C,

C++,

Java,

Perl,

Python,

Eiffel,

Tcl,

Ruby,

PHP.

Navíc je k dispozici také ovladač ODBC, s nímž můžeme k databázi MySQL přistupovat z nativních

aplikací Windows, jako je Access; existuje dokonce i ovladač ODBC pro Linux, i když pro jehovyužití není příliš mnoho důvodů.

V této kapitole se omezíme jen na rozhraní jazyka C, protože na ten je zaměřena celá knížka anavíc protože stejné knihovny pak využíváme i pro připojení z řady jiných jazyků.

Rutiny pro připojení

Z jazyka C se k databázi MySQL připojíme v následujících dvou krocích:

inicializace struktury popisovače připojení (connection handle),

fyzické vytvoření připojení.

Nejprve p



       
Knihkupectví Knihy.ABZ.cz - online prodej | ABZ Knihy, a.s.
ABZ knihy, a.s.
 
 
 

Knihy.ABZ.cz - knihkupectví online -  © 2004-2018 - ABZ ABZ knihy, a.s. TOPlist