Linuxové noviny | 11/99 | |||
| ||||
ÚvodOperační systém Linux se již pomalu stává stálicí i na databázovém trhu, a tak již není žádný problém provozovat téměř libovolný databázový server na Linuxu. Můžete si vyzkoušet např. Oracle, Informix, Sybase a další.Jenže... Kde je tedy problém? Co když náš počítač nepatří zrovna mezi ty nejžhavější novinky a jeho procesor a paměťové moduly (např. Intel 486/8MB) by mu mohlo závidět i leckteré muzeum počítačové historie? Jaké máme možnosti? Oracle či Informix použít nemůžeme, protože tyto databázové systémy mají někdy problémy i na podstatněji výkonnějších strojích (ostatně tyto databáze jsou vytvořeny pro enterprise prostředí, kde také hrají prim). Zbývají nám systémy jako PostgreSQL, MySQL nebo MiniSQL. Servery PostgreSQL i MySQL jsou velmi výkonné, ale i přesto velmi pomalé na naší hypotetické konfiguraci. Podívejme se tedy na server MiniSQL (aka mSQL nebo Minerva). MiniSQL je komerčním produktem společnosti Hughes Technologies Pty, Ltd. http://www.hughes.com.au/. Licenční podmínky jsou benevolentní pro nekomerční subjekty, které mohou MiniSQL kopírovat, šířit, či dokonce modifikovat bez jakýchkoli omezení. Poslední verze s číslem 2.0.11 byla uvolněna 23. srpna tohoto roku.
InstalaceInstalace serveru MiniSQL je ve světě Linuxu poměrně nestandardní. Je sice využito standardních prostředků poskytovaných většinou linuxových distribucí (autoconf), ale velice specifickým způsobem. I přesto je instalace poměrně jednoduchá a pokud zvolíte již připravenou binární distribuci ve formátu RPM, je naprosto bezproblémová. Máme-li k dispozici pouze zdrojové texty serveru MiniSQL, musíme je nejdříve rozbalit:
tar xfz msql-2.0.11.tar.gz Rozbalené zdrojové texty jsou nyní v adresáři msql-2.0.11 a mají níže popsanou strukturu. V hlavním adresáři jsou soubory BUGS (informace o tom, jak ohlašovat chyby v serveru msql), INSTALL (popis instalace serveru), MSQL_BOOK (o MiniSQL vyjde i kniha :-), Makefile (standardní soubor pro make), README, README.sco, RELEASE_NOTES (informace o aktuální verzi serveru MiniSQL). Vedle těchto souborů jsou v distribuci MiniSQL i adresáře: demos (obsahuje demo-aplikaci - záložky), doc (obsahuje kompletní dokumentaci ve formátu HTML a PostScript), misc, scripts a src. Poslední jmenovaný adresář obsahuje kompletní zdrojové texty serveru a ještě se o něm zmíníme. A nyní k vlastní instalaci. MiniSQL je možno přeložit na velkém počtu platforem a operačních systémů, a tak obsahuje podporu pro více platforem, která je implementována na adresářovém principu. Každá architektura bude mít svůj adresář, který vytvoříme pomocí příkazu
make target Výstup, který bychom mohli obdržet, může vypadat např. takto:
Making target directory for Linux-2.3.20-i686 Building directory tree. Adding common Adding conf Adding lang-common Adding lite Adding makedepend Adding makegen Adding msql Adding regexp Adding tests Adding tests/rtest.src Adding w3-msql Adding w3-msql/tests Adding sym-links Build of target directory for Linux-2.3.20-i686 complete Nyní bude vytvořen adresář targets a v něm další adresář pro naši architekturu. V našem případě bude mít jméno Linux-2.3.20-i686. V tomto adresáři již budeme mít připraveny zdrojové texty k překladu, a proto se do něj přepneme:
cd targets/Linux-2.3.20-i686 Dále spustíme konfigurační utilitku, která využívá služeb autoconf k rozpoznání vlastností cílového prostředí:
./setup Nyní již jenom zkontrolujeme obsah souboru site.mm, případně upravíme instalační cesty (proměnná INST_DIR), a můžeme spustit vlastní překlad a instalaci:
make make install Mezi tím, než nám doběhne překlad, si musíme rozmyslet, pod jakým uživatelem náš SQL server poběží - pro testování může běžet SQL server pod právy uživatele, který server instaloval, ale pro rutinní provoz bude lépe vytvořit zvláštního uživatele (např. msql), který bude sloužit pouze pro běh SQL serveru.
KonfiguraceServer MiniSQL je možno jednoduše konfigurovat. Veškeré konfigurační informace jsou uloženy v souboru ...instalační adresář.../msql.conf. Konfigurační soubor je rozdělen do sekcí general, system a w3-msql.Sekce general může vypadat např. takto:
[general] Inst_Dir = /usr/local/ DB_Dir = %I/msqldb mSQL_User = msql Admin_User = pavel Pid_File = %I/msql2d.pid TCP_Port = 1114 UNIX_Port = %I/msql2.sock Hodnota Inst_Dir ukazuje na adresář, který jsme zvolili při překladu. Pod tímto adresářem jsou schovány ostatní zajímavé soubory a adresáře. DB_Dir ukazuje na adresář, kde jsou uloženy datové soubory serveru. Pokud je ve jméně tohoto nebo i ostatních adresářů uvedeno %I, je tato dvojice znaků nahrazena obsahem proměnné Inst_Dir. Proměnná mSQL_User obsahuje jméno uživatele, pod kterým poběží databázový server jako takový (viz výše). Admin_User je uživatel, který bude mít povoleno provádět privilegované příkazy (vytváření resp. rušení databází, případně zastavení či reload databázového serveru). Proměnná Pid_File obsahuje jméno souboru, ve kterém bude v každý okamžik běhu databázového serveru MiniSQL uloženo identifikační číslo procesu hlavního démona msql2d. Proměnná TCP_Port obsahuje číslo TCP portu, na kterém bude server MiniSQL čekat na příchozí spojení (pokud bude spojení ze vzdáleného serveru povoleno). Poslední proměnnou je UNIX_Port. Obsahem této proměnné je jméno socketu, který bude použít pro komunikaci s databázovým serverem na lokálním počítači. Sekce system má stejnou strukturu, ale odlišné proměnné:
[system] Msync_Timer = 30 Host_Lookup = True Read_Only = False Remote_Access = True Local_Access = True Query_Log = True Query_Log_File = %I/query.log Proměnná Msync_Timer obsahuje počet sekund, po kterých bude synchronizován obsah databáze na disku s obsahem databáze v paměti databázového serveru. Proměnná Host_Lookup má podobnou funkci jako hodnota KNOWN v tcp_wrapperu. Pokud je tato proměnná nastavena na hodnotu True a klient, který se připojuje přes TCP port k lokálnímu databázovému serveru nemá v pořádku záznam v reverzní doméně, má bohužel smůlu a nepodaří se mu k databázovému serveru přípojit. Pokud je tato hodnota nastavena na False, připojit se může i ten, kdo tento záznam v pořádku nemá. Význam proměnné Read_Only je zbytečné vysvětlovat. Pokud je tato proměnná nastavena na True, je server spuštěn v režimu pouze pro čtení, a tedy žádný SQL příkaz nemůže změnit obsah databáze. Další dvě proměnné umožňují specifikovat režim serveru - server může poskytovat služby pouze lokálním klientům (Remote_Access = False, Local_Access = True), pouze vzdáleným klientům komunikujícím po TCP (Remote_Access = True, Local_Access = False) nebo všem klientům (Remote_Access = True, Local_Access = True). Pro nasazení na webový server je vhodné použít první popsanou metodu. Poslední dvě volby slouží především pro odlaďování aplikací, kdy je možno zaznamenávat veškeré přijaté SQL dotazy do souboru v následujícím formátu:
11-Oct-1999 22:09:45 pavel UNIX_SOCK pokus 95 INSERT INTO tabulka VALUES (1, 'sloupek1') Formát je zřejmý - v prvním řádku je uvedeno datum a čas položení SQL dotazu z druhého řádku. Dále je zde uveden uživatel (pavel), databáze (pokus) a typ spojení (UNIX_SOCK). Pro reálné nasazení doporučuji tyto volby ponechat vypnuté, neboť poněkud snižují odezvu serveru.
StartujemeNyní již tedy známe vše potřebné pro provozování serveru, ale stále ještě nevíme, jak vlastní server spustit. Je to jednoduché - při instalaci databázového serveru byl vytvořen i adresář bin/, který obsahuje několik důležitých programů.Nejdůležitějším z nich je program msql2d, což je vlastní server. Po jeho spuštění si můžeme ukázat funkci dalších programů z tohoto adresáře:
./msql2d Po spuštění server vypíše základní informace:
Mini SQL Version 2.0.11 Copyright (c) 1993-94 David J. Hughes Copyright (c) 1995-99 Hughes Technologies Pty Ltd. All rights reserved. Loading configuration from\ '/usr/local/msql.conf'. Server process reconfigured to accept\ 200 connections. Server running as user 'msql'. Server mode is Read/Write. Warning : No ACL file. Using global read/write access. Poté je již vše připraveno pro naši práci - server běží a je připraven naslouchat příkazům svého pána - databázového administrátora, který má k dispozici silný nástroj. Je jím program msqladmin, který umožňuje komfortní práci s databázovým serverem. Má několk možných argumentů, pomocí kterých je možno např. vytvořit databázi (msqladmin create), zrušit databázi (msqladmin drop), kopírovat či přesunout databázi (msqladmin copy/move). Samozřejmě je možné databázový server restartovat (msqladmin reload) či ukončit (msqladmin shutdown). Zajímavou vlastností je také možnost sledovat aktuální Stav serveru samotného pomocí příkazu msqladmin stats.
Dalšími zajímavými příkazy pro administrátora jsou msqlimport a msqlexport, které umožňují jednoduchý přenos dat mezi textovou a databázovou podobou. A ještě zajímavějším příkazem je msqldump, který ukládá kompletní databázi do textového formátu, pomocí kterého je možné okamžitě databázi obnovit. To je vhodné zvláště pro zálohování kompletního databázového serveru. Zajímavým nástrojem je také program relshow, který nám pomůže při zjišťování obsahu databázového serveru - může nám prozradit seznam databází na serveru (relshow) nebo obsah databáze, tj. seznam tabulek (relshow database) či sloupců v tabulce (relshow database table).
Přístupová právaTéměř samozřejmou vlastností databázových serverů moderní doby je možnost správy přístupových práv až na úroveň jednotlivých sloupců v tabulkách. Databázový server MiniSQL je bohužel v této oblasti poměrně pozadu a umožňuje pouze kontrolovat přístupová práva na úrovni jednotlivých databází. Vše se opět děje na úrovni editace souboru (oproti standardním SQL příkazům GRANT a REVOKE) msql.acl:
database=pokus read=nobody write=pavel host=* access=local,remote Pokud soubor msql.acl vypadá jako výše uvedený příklad, může uživatel pavel databázi pokus měnit a ostatní uživatelé z ní může pouze číst. Přístup je povolen jak z lokálního, tak ze vzdáleného počítače. Podrobnější dokumentaci k přístupovým právům naleznete v manuálu k serveru.
SQL příkazyServer MiniSQL není plnohodnotným SQL serverem, a to je nutno při jeho nasazení brát v úvahu. Samozřejmě jsou podporovány jednoduché příkazy CREATE (TABLE, [UNIQUE] INDEX, SEQUENCE), DROP, INSERT, DELETE, UPDATE, SELECT (WHERE, ORDER BY, AND, OR). Nejsou podporovány implicitní funkce jako např.:
SELECT MAX(Plat) FROM Zamestnanci; a vnořené příkazy SELECT. Zajímavou se může zdát podpora standardních operátorů LIKE a také vlastní implementace operátorů RLIKE (kompletní regulární výraz) či SLIKE (fonetické porovnávání). Příkazy samotné je možno zadávat po spojení s databázovým serverem. Spojení je možno navázat pomocí programu msql, která je klientskou částí MiniSQL.
Systémové proměnnéZajímavou vlastností serveru MiniSQL jsou také systémové proměnné - tedy jakési virtuální sloupce v tabulkách. Systémové proměnné poskytují informace nezávislé na vlastní struktuře a významu dat. Mezi implementované systémové proměnné patří _rowid (jednoznačný identifikátor řádku v tabulce), _timestamp (časová známka poslední modifikace řádku tabulky), _sysdate a _systime (aktuální datum a čas) a další.
Celkové hodnoceníMiniSQL je velice rychlým a jednoduchým databázovým serverem. Jeho rychlost je ovšem vyvážena nekompletní podporou jazyka SQL, a tím i složitější prací. Jednoduchá administrace je zase protipólem příliš hrubému rozvrstvení přístupových práv (pouze pro databáze, přičemž lepší servery mohou přístupová práva specifikovat až na úrovni sloupců tabulek).Před jeho nasazením je třeba pečlivě zvážit všechna pro a proti. Rychlost versus nízký komfort při administraci, jednoduchost versus kompatibilita. Ale i o tomto je databázový svět - databázových serverů je bezpočet, jen si vybrat ten nejvhodnější. |