MySQL

Z Wikiverzity
Skočit na navigaci Skočit na vyhledávání

MySQL (viz w:MySQL) je možná nejrozšířenějším databázovým systémem, vytvářeným jakožto Free Software, a to pro různé operační systémy. V dalším si ukážeme způsob práce v operačním systému Debian GNU/Linux (v jiných operačních systémech pracuje MySQL podobně).

MySQL Pracuje na principu klient-server. Je v zásadně jedno, jestli klientská i serverová aplikace běží na stejném počítači anebo na různých. Na různých počítačích může běžet i pod různými operačními systémy, vzájemná komunikace probíhá protokolem TCP/IP (tj. např. prostřednictvím Internetu nebo intranetu). Pro první seznámením s MySQL může být výhodné, když si vyzkoušíme instalaci serveru i klientu na vlastním počítači, na kterém máme práva roota.


Podstránky[editovat]

Instalace[editovat]

V Debianu jednoduše nainstalujeme balíky:

  • mysql-client
  • mysql-server

Pokud instalujeme jen mysql-server, tak s nám stejně nainstaluje mysql-client tak jako tak v důsledku závislostí.

Konfigurace od 8.0[editovat]

Ve verzi serveru 8.0 se zpřísnil způsob konfigurace.

sudo mysql_secure_installation

Tím nastavíme přístupovou policii a uživatele root. Dále spustíme klienta jakožto root v ubuntu:

sudo mysql

Dostaneme prompt:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Server version: 8.0.26-0ubuntu0.20.04.2 (Ubuntu)
mysql>

Nejdříve vytvoříme běžného uživatele:

 mysql> CREATE USER 'xxxx'@'localhost' IDENTIFIED BY 'supertajne_heslo12345';

A teprve potom mu udělíme příslušná oprávnění – pečlivě zvážíme, která, např.:

 mysql> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'xxxx'@'localhost' WITH GRANT OPTION;

Další čtení:

Konfigurace (OLD)[editovat]

Následuje konfigurace starších verzí MySQL serveru, než je verze 8:

Klienta spustíme z příkazového řádku obyčejného uživatele příkazem:

mysql

Zpravidla dostaneme odpověď:

ERROR 1045 (28000): Access denied for user 'jmeno'@'localhost' (using password: NO)

Tím si ověříme, že pracuje klient (navázal spojení se serverem) i server (odeslal chybovou hlášku). Chyba je způsobena tím, že uživatel "jmeno" (implicitně ten, který příkaz spouští) nemá dosud povolený přístup k databázím serveru.

Nastavení přístupového hesla roota[editovat]

Práva nastavovat tato hesla a přístupy uživatelů má superuživatel jménem 'root'. Pozor ale! Superuživatel 'root', který má nejvyšší práva pro správu serveru MySQL, není implicitně totožný se správcem operačního systému. Znamená to, že bezprostředně po nainstalování serveru MySQL se může kdokoli nadvlády nad MySQL zmocnit!

Pokud spustíme příkaz

mysql

z příkazové řádky roota, anebo z příkazové řádky běžného uživatele s vhodným přepínačem (přepínač -u následovaný jménem uživatele se připojí k MySQL serveru pod jménem tohoto uživatele):

mysql -uroot

pak obdržíme příkazovou řádku MySQL superuživatele MySQL, např.:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.0.32-Debian_7etch1-log Debian etch distribution

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

mysql> 

Pokud již umíme bezpečně s jazykem MySQL zacházet, pak z tohoto příkazového řádku klienta můžeme nastavit všechna potřebná práva. Pokud ne, pak raději mysql klienta opustíme příkazem:

quit;

a základní nastavení provedeme nějakou bezpečnější utilitou, např:

mysqladmin

Tato utilita spuštěná bez jakýchkoliv parametrů pouze vypíše nápovědu a skončí. Se známým přepínačem -uroot a s příkazem passwd ji využijeme na nastavení přístupového hesla správce serveru MySQL:

mysqladmin -uroot password nejake-tajne-heslo-spravce-123456

Ověříme si, že dosavadním způsobem bez hesla:

mysql -uroot

se už jako správci k MySQL serveru nepřipojíme, neboť obdržíme hlášku:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Musíme použít přepínač -p, který indikuje, že budeme přistupovat k účtu, chráněnému heslem:

mysql -uroot -p

Budeme vyzvání k zadání hesla a poté již se nám otevře přístup k MySQL jako superuživateli. Pokud však dosud naše znalosti nejsou na příslušné úrovni, raději z tohoto módu opět vystoupíme:

quit;

Podobným způsobem můžeme již nastavené heslo správce změnit, ale tentokrát již k utilitě mysqladmin musíme přistoupit přes staré heslo, tj. s přepínačem -p:

mysqladmin -uroot -p password nove-tajne-heslo-spravce-654321

Další možnosti utility mysqladmin[editovat]

Některé další možnosti, které si můžete vyzkoušet, jsou (pokaždé budete vyzváni k zadání hesla; pokud byste heslo napsali bezprostředně za přepínač -p, bude to pro vás o něco rychlejší, ale zato méně bezpečné - zadané heslo bude vidět nejen na vaší obrazovce, ale uvidí je i případný hacker, který by v tu chvíli tajně monitoroval vámi spouštěné procesy):

  • Zjištění, že MySQL server žije:
mysqladmin -uroot -p ping
  • status serveru
mysqladmin -uroot -p status
  • rozšířený status serveru
mysqladmin -uroot -p extended-status
  • zastavení serveru
mysqladmin -uroot -p shutdown

Práva uživatelů[editovat]

Nastavení práv uživatelů není v MySQL zcela triviální záležitost - je nutné pochopit význam tabulek databáze mysql. Alespoň se základním nastavením práv pomůže řádková utilita:

Příkazová řádka[editovat]

I když existují různá grafická prostředí pro práci s MySQL databází, základním způsobem práce s databází je příkazová řádka.

Klient[editovat]

 mysql -umuj_login -p

Výhodou je, pokud mám pro přístup do databáze vytvořeného stejného usera, jako je můj login do operačního systému; potom jej nemusím znovu zadávat a stačí jen:

 mysql -umuj_login -p

Vytvoření databáze[editovat]

CREATE DATABASE `moje_prvni_databaze` CHARACTER SET utf8 COLLATE utf8_czech_ci;

Import tabulek[editovat]

 mysql -p moje_databaze < soubor.sql

Export tabulek[editovat]

 mysqldump -p moje_databaze > soubor.sql

Abychom to ale mohli udělat, potřebujeme mít ještě PROCESS a LOCK TABLES privileges. Jinak dostaneme chybové hlášky:

mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
mysqldump: Got error: 1044: Access denied for user 'uuuu'@'localhost' to database 'my_database' when using LOCK TABLES

Takže musíme:

sudo mysql
mysql> GRANT PROCESS, LOCK TABLES on *.* TO 'xxxx'@'localhost' WITH GRANT OPTION;

Blbé je, že INSERT vypisuje všechny řádky tabulky do jedné řádky, hledám řešení:

 mysqldump -p -e moje_databaze | sed 's$),($),\n($g' > soubor.sql


Externí odkazy[editovat]

Referenční manuál[editovat]

Podrobný návod na konfiguraci ve velmi podrobném referenčním manuálu, který nalezneme na domovské stránce: www.mysql.org – Oficiální stránky

Různé manuály v češtině[editovat]

Seriály[editovat]

Další kapitoly[editovat]

Související články[editovat]