MySQL
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- /mysqld – MySQL démon (server)
- /Kódování –
- /Oprava tabulky –
- /problém –
- /Proměnné –
- /Uživatelská rozhraní – kromě řádkového i grafická rozhraní
Související stránky
editovatInstalace
editovatV 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
editovatVe 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, CREATE VIEW, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, INDEX, REFERENCES, RELOAD on *.* TO 'xxxx'@'localhost' WITH GRANT OPTION;
Další čtení:
Konfigurace (OLD)
editovatNá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
editovatPrá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
editovatNě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ů
editovatNastavení 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
editovatI 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.
- [1]: Robert Šípek (2018-07-02): MySQL: Práce s databází z příkazového řádku
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
editovatCREATE 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
editovatReferenční manuál
editovatPodrobný 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
- Originální manuál:
Různé manuály v češtině
editovatSeriály
editovat- České seriály na ABC linuxu (autor David Hauzar):
- Tvorba databází v MySQL, 6 dilů:
- Správa databází v MySQL, 3 díly - abclinuxu.cz, David Hauzar (2013): :
- Český seriál o MySQL na serveru Linuxsoft