- předchozí článek - následující článek - obsah - úvodní stránka -

Linuxové noviny 11/99

MySQL databázový server

Jan Pazdziora, adelton@fi.muni.cz

MySQL patří mezi jednodušší databázové servery, jednodušší ve smyslu, že implementuje jistou podmnožinu funkcí "velkých" databázových serverů, implementuje je dobře a rychle. Mezi jeho přednosti patří rychlost, přenositelnost, dobrá podpora propojení s okolním světem, mnoho vestavěných SQL funkcí. Co chybí jsou transakce, triggery či referenční integrita. Mezi jeho přednosti patří také jeho mostly-free licence.

Domovskou stránkou MySQL je http://www.mysql.com/. Server i klienti jsou k dispozici jak ve zdrojové podobě, tak pro mnoho platforem i v binární, včetně několika populárních distribučních formátů (například rpm). Překlad ze zdrojových textů je standardní

	./configure
	make
	make install

a samozřejmě je dobré číst dokumentaci. Překompilovat je nutno, pokud chceme, aby server používal jinou než standardní (ISO-Latin-1) znakovou sadu. K dispozici je jednak standardní ISO-Latin-2, jednak podpora pro české třídění. Tu zkompilujeme pomocí parametru

	./configure --with-charset-czech

Ve dřívějších verzích způsobovalo použití českého třídění chyby v indexech, poslední 3.22 a nejnovější 3.23 už tuto chybu nemají (alespoň jsem na ni nenarazil). České třídění pracuje interně se znakovou sadou ISO-8859-2, pokud chceme použít na klientské straně jinou znakovou sadou, povolíme v souboru sql/convert.cc přístup k překódovacím rutinám a nastavíme překódovávání přenášených textových dat SQL příkazem SET OPTION CHARACTER SET.

MySQL je primárně nástroj pro uložení dat v tabulkách, a pro přístup k těmto datům (změny, výběry) prostřednictvím SQL - Structured Query Language (některé kapacity tvrdí, že to S je Simple). Po instalaci, vytvoření základní databáze a tabulek skriptem scripts/mysql_install_db.sh a spuštění serveru můžeme k připojení použít řádkový klient mysql. Zde pak již zadáváme SQL příkazy a dostáváme odpovědi, buď ve formě tabulky s vybranými řádky, či informací o provedené akci. Server i klientská část jsou vysoce konfigurovatelné, ať již parametry příkazové řádky či konfiguračními soubory. Je tedy možno zadat například port, na kterém server očekává příchozí spojení, či nejrůznější výkonové parametry typu velikosti bufferů. Velmi rozsáhlá a podrobná dokumentace je naším přítelem, pokud chceme server využít opravdu efektivně.

MySQL používá pro uložení dat jednoduchý postup databáze == adresář, tabulka == soubor (resp. více souborů, jeden na data, další na indexy). Tedy

  $ mysql test
  mysql> create table names\
     (id integer, name varchar(20)) ;

vytvoří v podadresáři test soubory names.* a s tímto souborem nadále pracuje. To dává například možnost zálohovat pouze ty tabulky, které považujeme za podstatné. Vzhledem k tomu, že v MySQL není k dispozici podpora pro foreign klíče, server se snadno vyrovná i se situací, kdy ho spustíme nad databází (adresářem), kde je polovina tabulek novějších a polovina starších, obnovených ze zálohy (vyrovná ve smyslu, že při spuštění nebude hlásit chybu a tabulky akceptuje v takové podobě, v jaké mu je dáme).

Na MySQL je pěkné, že dává uživateli co největší kontrolu nad daty. Například množství datových typů, pro celá čísla odstupňovaných po jednom bytu, či fakt, že s "dlouhými" daty (BLOB, TEXT) je ve většině případů pracuje zcela stejně jako s daty typu VARCHAR. Ohromující je také množství vestavěných SQL funkcí na manipulace téměř všeho se vším, či SQL příkaz REPLACE.

Z hlediska standardů MySQL implementuje jistou podmnožinu ANSI SQL92 s mnoha rozšířeními. Odchylky v syntaxi nejsou velké a jsou často vedeny potřebou zapodporovat i funkčnost navíc.

MySQL dovoluje definovat přístupová práva na základně více kritérií - na tabulky, sloupce tabulek, databáze, podle uživatelů či podle strojů, ze kterých se hlásí. Systém práv je relativně složitý, velkým pomocníkem při testování správného nastavení může být utilita mysqlaccess. Dokumentace ale velmi podrobně popisuje algoritmus, který MySQL při přístupu k datům používá, počítačově nadaný člověk by tedy neměl mít s vyladěním pro konkrétní situaci problémy (a nenadanému pravděpodobně postačí, že do databáze test je možno se v defaultní konfiguraci dostat bez hesla). Novější verze MySQL podporují již i příkaz GRANT a REVOKE, informaci o přístupových právech je ale možno přímo editovat i v tabulkách user, db, host, tables_priv a columns_priv v databázi mysql. Pokud budeme měnit záznamy o přístupových právech přímo v tabulkách, je dobré nezapomenout dát posléze mysqladmin flush-privileges, aby server vzal nové nastavení na vědomí.

Vzhledem k tomu, že MySQL nepodporuje transakce, jsou všechny akce okamžitě provedeny, nejsou zaznamenávány do rollback segmentů. K dispozici je ovšem několik úrovní logování změn - ty sice není možno použít k automatickému rollbacku například po pádu počítače, ale jako prostředek pro dohledání, co se s daty stalo, ve většině případů stačí.

Neexistence transakčního zpracování diskvalifikuje MySQL z "velkých" aplikací, ovšem je zcela vyhovující (a často i výhodou) v hlavní doméně nasazení serveru - databázový server na Web serveru. A zde databáze může být měřeno počtem řádků dosti rozsáhlá. Režie při navázání spojení s databází je velmi malá a připojení tudíž velmi rychlé. Pro typické aplikace, které ve většině případů potřebují udělat pouze connect a 5 selectů je tato vlastnost ideální. Existují rozhraní pro snad všechny rozšířené skriptovací i standardní jazyky, od ODBC, JDBC přes PHP a Perl až po klasické API v jazyce C.

MySQL je vyvíjen firmou TcX AB a není obecně šířen pod GPL (byť vybrané starší verze jsou k dispozici pod GPL). Licence je v zásadě taková, že pokud neprodáváte produkt, jehož by byl MySQL server součástí, můžete ho v Unixové verzi používat zdarma, tedy i ve vlastní firmě ke komerčním účelům. Klientská část je navíc šířena jako public domain. Můžete samozřejmě podpořit vývoj MySQL zakoupením licence či některého z typů podpory.

Vývojáři jsou velmi přístupní podnětům a patchům, domnívám se proto, že má cenu o MySQL i z dlouhodobého hlediska uvažovat, byť není přímo pod GPL. Přímo srovnat by se pravděpodobně dal s MiniSQL serverem, z něhož ideově vyšel, zde MySQL jasně vede jednak svými možnostmi, jednak aktivní odezvou vývojářů na hlášení chyb. Na druhé straně PostgreSQL přidává transakční zpracování a větší snahu implementovat vše, co ANSI standardy říkají. *


- předchozí článek - následující článek - obsah - úvodní stránka -