přejít na obsah přejít na navigaci

Linux E X P R E S, MySQL pro zelenáče

MySQL pro zelenáče

mysql.png

Není to tak dávno, co mi běhal mráz po zádech, kdykoliv někdo řekl slovíčko MySQL. Předpokládal jsem, že instalace a používání této databáze je úkol pouze pro několik vyvolených, mezi které nepatřím. Bohudík jednoho dne nastala situace, kdy bylo použití této databáze v naší firmě nevyhnutelné a já se ji musel, jak se lidově říká, „našrotit“. Po několika bezesných nocích jsem došel ke zjištění, že mé obavy byly zcela dětinské a plané. Dnes již považuji MySQL za svého velkého kamaráda, se kterým bych vás chtěl v následujícím článku trochu seznámit.


Kde se MySQL využívá

MySQL bývá s velkou oblibou ukryto ve zkratce LAMP, jež označuje spojení Linuxu, webového serveru (Apache), databáze (MySQL) a programovacího jazyka (PHP, Perlu, Pythonu). Neznamená to však, že MySQL využijete pouze pro svůj webový portál či blog. K MySQL se umí připojit spousta programů a od některých byste to snad ani nečekali. Jmenujme alespoň neznámější z nich – OpenOffice.org, logovací démon syslog, jmenný server BIND, pošťák Postfix a další.

MySQL je databáze a databázový systém vytvořený švédskou firmou MySQL AB. Tento databázový systém je oblíbený díky své snadné implementaci, a to jak na poli Linuxu, tak i jiných operačních systémů. Jeho hlavní autoři jsou Michael Widenius a David Axmark. Za zmínku také stojí skutečnost, že tento databázový systém je vydáván jak pod svobodnou, tak i komerční licencí.

Jak se dostane do počítače

MySQL je ve většině distribucí rozděleno na dva balíčky. První z nich obsahuje samotný server a druhý MySQL klienta. Poměrně častou chybou bývá opomenutí instalace právě jednoho z nich. Pokud budete chtít využívat MySQL například v prostředí programovacího jazyku PHP, je potřeba zvlášť doinstalovat podporu pro tento jazyk. V distribuci Ubuntu byste tedy kompletní databázový systém včetně podpory pro PHP nainstalovali za pomoci příkazu apt-get install mysql-server mysql-client php5-mysql . U ostatních distribucí je to obdobné.

SQL (obvykle vyslovováno anglicky es-kjů-el) je standardizovaný dotazovací jazyk používaný pro práci s daty v relačních databázích. SQL je zkratka anglických slov Structured Query Language (strukturovaný dotazovací jazyk). Zdroj: Wikipedia.

Poinstalační párty

I přestože zřejmě budete instalovat MySQL z balíčku, můžou se vyskytnout drobné potíže. Asi nejčastějším problémem bývá nemožnost spuštění MySQL serveru po instalaci. Na konzoli se pak vypisuje následující chybová hláška:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2)

Typickým „generátorem“ této hlášky je například Slackware Linux. Oprava je naštěstí velice jednoduchá – stačí nastavit v adresáři /var/lib/mysql správná práva a vytvořit základní databázovou strukturu. Ve Slackware Linuxu je vlastníkem MySQL databáze uživatel mysql a skupina mysql. Provedeme proto následující příkaz:

chown -R mysql:mysql /var/lib/mysql/

Následně se „přepneme“ na uživatele mysql a pomocí příkazu mysql_install_db vytvoříme základní databázovou strukturu.

# su mysql
mysql# mysql_install_db

Abychom nemuseli vytahovat manuál, instalátor nám na závěr procedury poradí, jakým způsobem změníme rootovské heslo, nastartujeme databázi či otestujeme její výkon.

Installing all prepared tables
Fill help tables
To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h tux password 'new-password'
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &
You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
cd sql-bench ; perl run-all-tests
Please report any problems with the /usr/bin/mysqlbug script!
The latest information about MySQL is available on the web at http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com

Nyní se příkazem exit odhlásíme z uživatelského účtu mysql. Pokud proběhlo vše hladce, můžeme konečně poprvé nastartovat MySQL server. V Ubuntu kupříkladu pomocí sudo /etc/init.d/mysql start . Každopádně musíme tento příkaz provést jako superuživatel root.

Přípravná fáze

Většina uživatelů ve sledu situace na popud instalátoru mění pomocí příkazu mysqladmin rootovské heslo, edituje hlavní konfigurační soubor MySQL (my.cnf) a nakonec „optimalizuje“ databáze. To sice není nic špatného, ale všechny tyto kroky za nás s daleko větší grácií provede program mysql_secure_installation . Po jeho spuštění uvidíte v konzoli text, který vás vyzývá k zadání „starého“ rootovského hesla. Vzhledem k tomu, že my máme čerstvou instalaci a heslo ještě není nastaveno, stiskneme pouze klávesu [Enter].

Další otázkou pak je, zda-li chceme zadat nové rootovské heslo. Bez tohoto hesla se s databázovým systémem nedá pracovat, a proto zvolíme [y]. Na položce New password: napíšeme naše nové heslo a odentrujeme. Systém si následně z bezpečnostních důvodů vyžádá zopakovaní hesla hláškou „Re-enter new password:“. Pakliže zadáme obě hesla stejná, MySQL je uloží do svých databází a od této chvíle již můžeme nové heslo používat.

Dalším „problémem“ je existence anonymního uživatele, který může s omezenými právy nahlížet do vybraných databází. Takového uživatele v systému nechceme, a proto na popud instalátoru „Remove anonymous users? [Y/n]“ odpovíme klávesou [y], čímž výtečníka definitivně odstraníme. V základní instalaci je taktéž povolen vzdálený přístup roota do MySQL.

Vzdálený přístup obvykle nebývá vůbec využíván a navíc jím zbytečně otevíráme vrátka potencionálním útočníkům. Z těchto dvou důvodů jej opět vypneme kladnou odpovědí na otázku. Zbývají nám tak poslední dva kroky. V prvním z nich odstraníme testovací databázi, která nám k ničemu neposlouží. V druhém kroku znovu nahrajeme všechny tabulky, aby se projevily veškeré naše změny, které jsme provedli pomocí programu mysql_secure_installation .

Vytváříme databázi

Jelikož už jsme se „prokousali“ instalací a základním nastavením, můžeme začít pracovat se samotnými databázemi, tabulkami a daty v nich. Asi nejčastějším úkonem, který budeme provádět, je vytváření a mazání databází. Toho lze docílit dvěma způsoby. První způsob je vytvoření prázdné databáze pomocí příkazu mysqladmin, druhý je pak pomocí řádkového klienta mysql.

Představme si situaci, že sedíte na svém počítači a chcete vytvořit databázi klienti. Můžeme to provést takto:

První způsob
Do konzole zadáme mysqladmin -u root -p create klienti (po výzvě „Enter password:“ zadáme root heslo k MySQL).
Druhý způsob:

Do konzole zadáme mysql -u root -p (po výzvě „Enter password:“ zadáme rootovské heslo k MySQL). Následně se objeví výpis řádkového klienta:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11 to server version: 5.0.24a
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Mysql>

Zadáme CREATE DATABASE klienti; a po odentrování dostaneme hlášku „Query OK, 1 row affected (0.00 sec)“. Opustíme řádkového klienta napsáním příkazu quit.

U obou příkladů jsou v příkazu dva parametry, a to -u a -p . Parametr -u nám udává, pod jakým uživatelem budeme operaci provádět. Protože máme prozatím pouze uživatele root (nezaměňujme ho se systémovým superuživatelem root – jedná se o něco zcela jiného), vyplníme root. Parametr -p nám udává, jakým heslem se k databázi připojujeme. Pokud za parametr -p nic nenapíšeme, MySQL si heslo interaktivně vyžádá. V případě, že bychom potřebovali vytvářet databáze například skriptem, napíšeme za tento parametr (bez mezery) ještě dané heslo. Výsledný příkaz by pak vypadal třeba takto:

mysqladmin -u root -pmojeheslo create klienti

Od tohoto použití vás však odrazuji, neboť heslo zůstane zapsané v historii shellu (soubor .bash_history) a je velmi jednoduché ho získat – soubor prostě otevřete v libovolném textovém editoru. Často používaným parametrem je také -h a -P. Pokud tipujete, že -h znamená „help“, pak se pletete. Udává nám totiž, ke kterému stroji (hostu) se budeme připojovat. Pokud jej v příkazu neuvedeme, pak se předpokládá, že používáme lokální databázi. Parametrem -P můžete určit, na jakém portu MySQL naslouchá. Toho se využívá především při instalaci více MySQL serverů na jednom stroji.

Asi vás bude zajímat, který z výše uvedených postupů je lepší používat. Na tuto otázku je těžké odpovědět. Pro vytvoření jedné databáze je (co se týče pracnosti) rozhodně lepší první postup. Pokud byste ale měli takových databázi dělat několik, neustálé psaní hesla by vás zřejmě zbavilo rozumu. Z tohoto důvodu doporučuji znát oba postupy a vždy použít ten vhodnější.

Importujeme data do databáze

Poněvadž prázdná databáze by nám byla k ničemu, naučíme se do ní importovat data. Typicky tato situace nastává, pokud zprovozňujeme webové fórum či blog, který využívá databáze MySQL. Kromě samotných stránek bývá v jednom adresáři umístěn soubor se jménem například data.sql. Tento soubor obsahuje veškerá potřebná data a podle návodu má být nahrán do databáze s názvem klienti. Protože již máme tuto databázi vytvořenou, přejděme rovnou k importu dat.

První způsob:
Do konzole zadáme mysql -u root -p klienti < /home/hodza/data.sql (po výzvě „Enter password:“ zadáme root heslo k MySQL).
Druhý způsob:

Do konzole zadáme mysql -u root -p (po výzvě „Enter password:“ zadáme root heslo k MySQL). Následně se objeví výpis řádkového klienta:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11 to server version: 5.0.24a
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Mysql>

Zadáme USE klienti; a po odentrování dostaneme hlášku Database change. Tímto jsme se přepnuli do databáze klienti. Následně naimportujeme data příkazem source /home/hodza/data.sql. MySQL nám odpoví „Query OK, 0 rows affected (0.01 sec)“. Opustíme řádkového klienta napsáním příkazu quit.

Zobrazujeme data v databázi

Abychom si byli jisti, že jsou data správně naimportovaná, zkusíme si je zobrazit. K zobrazení dat nepoužijeme příkaz mysqladmin, ale naučíme se nový – mysqlshow.

První způsob:

Do konzole zadáme mysqlshow -u root -p klienti:

Enter password:
Database: klienti
+--------------+
|    Tables    |
+--------------+
| kontakt      |
| smlouvy      |
| platby       |
+--------------+
Druhý způsob:

Do konzole zadáme mysql -u root -p (po výzvě „Enter password:“ zadáme root heslo k MySQL). Následně se objeví výpis řádkového klienta:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39 to server version: 5.0.24a
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

Vybereme databázi klienti příkazem use klienti; :

mysql> use klienti;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

Zobrazíme si patřičná data příkazem show tables; :

mysql> show tables;
+-------------------+
| Tables_in_klienti |
+-------------------+
| kontakt           |
| smlouvy           |
| platby            |
+-------------------+
3 rows in set (0.00 sec)

Opustíme řádkového klienta napsáním příkazu quit.

Odstraňujeme data

Bohužel ne vždy se podaří nahrát data tak, jak bychom si představovali. V tomto případě můžeme opět použít příkaz mysqladmin, vše smazat a následně znovu nahrát.

První způsob:

Do konzole zadáme mysqladmin -u root -p drop klienti :

mysqladmin -u root -p drop klienti
Enter password:
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.
Do you really want to drop the 'klienti' database [y/N] y

Potvrdíme smazání databáze stiskem klávesy [y].

Database "klienti" dropped
Druhý způsob:

Do konzole zadáme mysql -u root -p (po výzvě „Enter password:“ zadáme root heslo k mysql). Následně se objeví známý výpis řádkového klienta a databázi klienti smažeme příkazem DROP DATABASE klienti; :

mysql> DROP DATABASE klienti;
Query OK, 3 rows affected (0.00 sec)

A nezapomeneme opustit řádkového klienta napsáním příkazu quit.

Často slýchávám z řad svých kolegů a přátel, že studium řádkových klientů je zbytečná ztráta času, neboť například PHPMyAdmin to udělá na tři kliknutí taky. Já si troufám si říct, že práce s konzolovými nástroji je daleko rychlejší a preciznější než kterékoliv webové rozhraní a navíc se nebojím dne, kdy spadne webový server a já se nedostanu ke svým datům. Těm z vás, které můj článek zaujal, doporučuji pokračovat v samostudiu. Opomněli jsme například příkazy mysqldump, mysqlhotcopy, mysqlimport a spoustu důležitých funkcí – především těch, které pracují přímo s daty v tabulkách.

Rozhraní phpMyAdmin je nástroj napsaný v jazyce PHP umožňující jednoduchou správu obsahu databáze MySQL prostřednictvím webového rozhraní. V současné době umožňuje vytvářet/rušit databáze, vytvářet/upravovat/rušit tabulky, provádět SQL příkazy a spravovat klíče. Jedná se o jeden z nejpopulárnějších nástrojů pro správu databáze. Je k dispozici v 52 jazycích. Zdroj: Wikipedia.

Nahoru

Odkazy

Příspěvky

MySQL pro zelenáče
martin 4. 11. 2008, 12:39:30
Odpovědět  Odkaz 
vsude jsou to krasne tutorialy ale nikde jsem se nedocetl co mam delat kdyz se neco nepovedlo tzn kdyz to proste nefunguje

hlaska se mi objevi ale nic nejde delat zadny z prikazu neodpovida tomu co by mel teda vysledek je vzdy 0
martin@martin-desktop:~$ sudo mysql -h localhost -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 51
Server version: 5.0.51a-3ubuntu5.3 (Ubuntu)

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

mysql&gt; CREATE DATABASE klienti; a po odentrovani se objevi nasledujici radek
`&gt;
Re:MySQL pro zelenáče
Rada 5. 11. 2008, 11:13:51
Odpovědět  Odkaz 
Je ten poslední znak u tebe opravdu středník?

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz