Inštalácia databázového servera

Úloha

  1. Všetky nasledovné úlohy vykonajte prostredníctvom vzdialeného prístupu z windows pracovnej stanice.
  2. Nainštalujte databázový server mariadb
  3. Zabezpečte prístup na server
  4. Vyskúšajte prístup k serveru pomocou klienta mysql
  5. Nainštalujte klienta phpMyAdmin

Teória

Ukladanie veľkého množstva dát je vlastne hlavný zmysel prečo boli počítače vlastne vymyslené. Preto neprekvapí že s nástupom sietí boli vytvorené systémy, kotré umožňujú pristupovať k uložením datam prostredníctom siete. Takéto systémy označujeme ako databázaové systémy. Existuje veľa rôznych druhov. Jedným z nich sú relačné databázové systémy.

Postup

  1. Spustite si svoj server. Potom sa prepnite na windows stanicu, prihláste sa a zvyšok cvičenia už pracujte len tu.
  2. Prihláste sa na server prostredníctvom ssh prístupu pomocou programu putty. Po prihlásení urobte zo seba správcu.
  3. Vyhľadanie inštalačných balíkov
    apt list | grep maria |less
    Zvislá čiara je Altgr+W
    Ukončenie prezerania Q Vo výpise si všimnite že okrem mariadb existuje aj malík maria čo je nejaký balík pre matematiku
  4. apt update
    Pre istotu si urobíme aktualizáciu zoznamu inštalačných balíkov
  5. apt install mariadb-server
    Týmto príkazom sa nainštaľuje aj mariadb-klient
  6. Skontroľujeme si či sa databázový démon spustil a normálne beží.
    service mariadb status
  7. Skúsime sa pripojiť k databáze pomocou CLI klienta je jedno či použijeme straší príkaz mysql alebo mariadb
    root@macik:~# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 35 Server version: 10.11.6-MariaDB-0+deb12u1 Debian 12 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  8. Vyskúšame si zopár základných príkazov ako je help, status, exit, quit
    Všimnite si aj možnosť skráteného zápisu pomocou znaku \ Tento spôsob sa hodí ak budeme potrebovať vložiť príkaz medzi už
    MariaDB [(none)]> help General information about MariaDB can be found at http://mariadb.org List of all client commands: Note that all text commands must be first on line and end with ';' ? (\?) Synonym for `help'. clear (\c) Clear the current input statement. connect (\r) Reconnect to the server. Optional arguments are db and host. delimiter (\d) Set statement delimiter. edit (\e) Edit command with $EDITOR. ego (\G) Send command to MariaDB server, display result vertically. exit (\q) Exit mysql. Same as quit. go (\g) Send command to MariaDB server. help (\h) Display this help. nopager (\n) Disable pager, print to stdout. notee (\t) Don't write into outfile. pager (\P) Set PAGER [to_pager]. Print the query results via PAGER. print (\p) Print current command. prompt (\R) Change your mysql prompt. quit (\q) Quit mysql. rehash (\#) Rebuild completion hash. source (\.) Execute an SQL script file. Takes a file name as an argument. status (\s) Get status information from the server. system (\!) Execute a system shell command. tee (\T) Set outfile [to_outfile]. Append everything into given outfile. use (\u) Use another database. Takes database name as argument. charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets. warnings (\W) Show warnings after every statement. nowarning (\w) Don't show warnings after every statement. For server side help, type 'help contents' MariaDB [(none)]> status -------------- mysql Ver 15.1 Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper Connection id: 35 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.11.6-MariaDB-0+deb12u1 Debian 12 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb3 Conn. characterset: utf8mb3 UNIX socket: /run/mysqld/mysqld.sock Uptime: 33 min 41 sec Threads: 1 Questions: 113 Slow queries: 0 Opens: 38 Open tables: 31 Queries per second avg: 0.055 -------------- MariaDB [(none)]> exit Bye root@macik:~#
  9. Znova si spustíme klienta. Zadajte príkaz help. Všimnite si aj možnosť skráteného zápisu pomocou znaku \ Tento spôsob sa hodí ak budeme potrebovať vložiť príkaz na ovládanie klienta medzi iné SQL príkazy.

    Teraz sa ukážeme ako sa dajú zadávať príkazy jazyka SQL. Tu platí že každý takýto príkaz musí byť ukončený znakom ; Hlavne zozačiatku sa na to bude zabúdať. V skutočnosti to vôbec nevadí. Tento mechanizmus je tu hlavne preto aby sme mohli zadávať dlhé SQL príkazy na viac riadkov. Príkaz sa teda neukončí a nepošle na vykonanie pokiaľ na konci nebude znak ;
    Ak ho tam zabudneme napísať znamená to že ho pokojne môžeme dopísať na ďalšom riadku.

    Ako príklad si ukážme ako by sa mohol zapísať príkaz show databases; ktorý slúži na zobrazenie databáz.

    MariaDB [(none)]> show -> databases -> ; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0,000 sec)
    Najprv som zadal príkaz show. Pojeho odoslaní sa mi zobrazil pokračovací riadok pretože som neukončil príkaz. Teraz som si uvedomil že potrebujem zadať aj čo chcem zobraziť a tak som pridal kľúčové slovo databases Ale zase som dostal pokračovací riadok pretože som opäť príkaz neukončil. Lenže v tomto momente už je to všetko a chcem príkaz ukončiť čo urobím tak že napíšem samotný znak ; To má za následok že celé sa to pochopí ako jeden príkaz a správne sa to vykoná.
  10. Ďalej treba vedieť čo robiť ak sa v príkaze pomýlime. Pokiaľ sme na riadku ktorý sme ešte neodoslali je to jednoduché a pomocou editačných kláves môžeme riadok opraviť.
    Horšia je situácia ak riadok bol odoslaný ale nebol ukončený príkaz. Vtakom prípade môžeme príkaz ukončiť a odoslať s tým že bude naslebovať chyba, alebo môžeme použiť skratku \c ktorá celý zadaný vstup zmaže.
    MariaDB [(none)]> shov -> data\c MariaDB [(none)]>↑ shov data
    V druhom riadku po napísaní zopár písmen som si uvedomil že som zadal chybne príkaz show a tak som zrušil celý vstupný príkaz. Samozrejme aj tu funguje história vstupov a tak si pomocou klávesy môžem vyvolať predošlé zadané riadky a prípadne ich aj editovať pred odoslaním
  11. Keď už vieme ako s CLI klientom pracovať tak si skúsme pozrieť databázu mysql Aby sme to mohli robiť jednoducho tak najprv príkazom use menoDb povieme že chceme databázu používať.
    MariaDB [(none)]> use mysql 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 MariaDB [mysql]>
    Dostali sme informáciu že client si načítal mená tabuliek a stĺpcov aby ich mohol dopĺňať a aj informáciu ako sa tomu dá zabrániť. Nakoniec sme informovaný že databáza bola zmenená o čom svedčí výzva kde už v hranatých zátvorkách nefiguruje nápis (none), čo znamená že nepracujeme so žiadnou konkrétnou databázou. Ale máme tam už informáciu že pracujeme s databázou ktorú sme si dali do používania
  12. Teraz by asi každého napadlo že databáza sa skladá z nejakých tabuliek. To znamená že si chcem pozrieť ich názvy Stačí zadať príkaz show tables; a dostaneme odpoveď.
    MariaDB [mysql]> show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | column_stats | | columns_priv | | db | | event | | func | | general_log | | global_priv | | gtid_slave_pos | | help_category | | help_keyword | | help_relation | | help_topic | | index_stats | | innodb_index_stats | | innodb_table_stats | | plugin | | proc | | procs_priv | | proxies_priv | | roles_mapping | | servers | | slow_log | | table_stats | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | transaction_registry | | user | +---------------------------+ 31 rows in set (0,000 sec)
  13. Teraz vidím že databáza obsahuje 31 tabuliek (čo nie je celkom pravda). Sú to tabuľky ktoré používa samotná databáza na svoje fungovanie. Z celého zoznamu mi ako jediný názov niečo pripomína tabuľka user a preto by som si ju rád zobrazil. Tu už treba poznať základné príkazy jazyka SQL select * from user; a dostaneme odpoveď.
    MariaDB [mysql]> select * from user; +-----------+-------------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+---------+--------------+--------------------+ | Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | Delete_history_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string | password_expired | is_role | default_role | max_statement_time | +-----------+-------------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+---------+--------------+--------------------+ | localhost | mariadb.sys | | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 | 0 | mysql_native_password | | Y | N | | 0.000000 | | localhost | root | invalid | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | mysql_native_password | invalid | N | N | | 0.000000 | | localhost | mysql | invalid | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | mysql_native_password | invalid | N | N | | 0.000000 | +-----------+-------------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+---------+--------------+--------------------+ 3 rows in set (0,001 sec)
    Och to je ale dlhá tabuľka. Keď to prekopírujem sem na web stránku tak sa to zobrazí celkom pekne ale aj tak je to dosť neprehľadné. Oveľa horšie to dopadne na terminály, kde nemáme dostatočnú šírku. A tak sa jeden riadok vypíše do niekoľkých riadkov terminála. A to je už tak neprehľadné že sa z toho vôbec nedá vyznať.
  14. Preto použijem skratku ktorá je uvedená v helpe ako \G Táto skratka posiela príkaz k vykonaniu ale na rozdiel od \g alebo znaku ; zobrazuje výsledok po jednotlivých riadkoch.
    MariaDB [mysql]> select * from user\G *************************** 1. row *************************** Host: localhost User: mariadb.sys Password: Select_priv: N Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: N Shutdown_priv: N Process_priv: N File_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Execute_priv: N Repl_slave_priv: N Repl_client_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: N Create_tablespace_priv: N Delete_history_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: mysql_native_password authentication_string: password_expired: Y is_role: N default_role: max_statement_time: 0.000000 *************************** 2. row *************************** Host: localhost User: root Password: invalid Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Reload_priv: Y Shutdown_priv: Y Process_priv: Y File_priv: Y Grant_priv: Y References_priv: Y Index_priv: Y Alter_priv: Y Show_db_priv: Y Super_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Execute_priv: Y Repl_slave_priv: Y Repl_client_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Create_user_priv: Y Event_priv: Y Trigger_priv: Y Create_tablespace_priv: Y Delete_history_priv: Y ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: mysql_native_password authentication_string: invalid password_expired: N is_role: N default_role: max_statement_time: 0.000000 *************************** 3. row *************************** Host: localhost User: mysql Password: invalid Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Reload_priv: Y Shutdown_priv: Y Process_priv: Y File_priv: Y Grant_priv: Y References_priv: Y Index_priv: Y Alter_priv: Y Show_db_priv: Y Super_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Execute_priv: Y Repl_slave_priv: Y Repl_client_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Create_user_priv: Y Event_priv: Y Trigger_priv: Y Create_tablespace_priv: Y Delete_history_priv: Y ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: mysql_native_password authentication_string: invalid password_expired: N is_role: N default_role: max_statement_time: 0.000000 3 rows in set (0,001 sec)
    Stále je to dlhá tabuľka. Ale už je to prehľadnejšie a hlavne si teraz aj v terminále môžem zistiť že tabuľka zatiaľ obsahuje iba troch užívateľov. Z toho je jeden root. A pokiaľ sa prihlási z localhost, teda lokálne na danom serveri, tak má plné práva na všetky databázové operácie. Pozor na to že to je úplne iný správca než je správca servera. Toto je správca databázového servera, ktorý nebýva totožný so správcom servera. Druhý poznatok je že zatiaľ sme totuto databázovému správcovi nenastavovali heslo (inštalácia db sa na žiadne heslo nepýtala).
  15. Databáza s nenastaveným heslom je bezpečnostné riziko a preto by bolo veľmi dobré si heslo pre správcu databázy nastaviť. Ukončime teda klienta príkazom exit a skúsme aké existujú príkazy ktoré začínajú slovom mysql To sa robí tak že sa po zadaní textu dvakrát stisne tabelátor.
    MariaDB [mysql]>exit Bye root@macik:~# mysql Tab Tab mysql mysqld_safe mysqlimport mysqlshow mysqlaccess mysqld_safe_helper mysql_install_db mysqlslap mysqladmin mysqldump mysqloptimize mysql_tzinfo_to_sql mysqlanalyze mysqldumpslow mysql_plugin mysql_upgrade mysqlbinlog mysql_find_rows mysqlrepair mysql_waitpid mysql_convert_table_format mysql_fix_extensions mysqlreport mysqld mysqlhotcopy mysql_secure_installation mysqld_multi mysqlcheck mysql_setpermission root@macik:~# mysql
  16. Predošlého zoznamu príkazov to pomerne jednoznačne ukazuje že treba použiť príkaz mysql_secure_installation Na všetky otázky doporučujem odpovedať stisnutím klávesy Enter Tak sa potvrdia prednastavené bezpečné voľby. Po otázke nastavenie hesla správcu zadajte heslo 123456
    root@macik:~# mysql_secTabure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none):Enter OK, successfully used password, moving on... Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n]Enter Enabled successfully! Reloading privilege tables.. ... Success! You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n]Enter New password:123456Enter Re-enter new password:123456Enter Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n]Enter ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n]Enter ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n]Enter - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n]Enter ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! root@macik:~#
  17. Konečne je to správne nastavené a teraz si ukážeme ako obyčajný užívateľ môže robiť správcu databázy. Stačí mu len prezradiť aké je meno správcu root a aké je heslo tohoto správcu 123456, ktoré sme zadali pre jednoduchosť iba takéto. Ako prvé sa odhlásim zo správcovského účtu a potom spustím CLI mysql a dvomi voľbami. -u root nastavuje užívateľa ktorý sa má k databáye prihlásiť. -p slúži ako ziadosť o zadanie hesla
    root@macik:~#logout peter@macik:~$ mysql -u root -p Enter password:123456 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 54 Server version: 10.11.6-MariaDB-0+deb12u1 Debian 12 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
    A vidíte ako normálny unixový uživateľ peter sa prihlásil ako správca databázy a má ju teraz plne pod kontrolou.
  18. Ukončite mysql príkazom exit a prihláste sa opäť ako správcovia servera. a nainštalujte balík phpmyadmin
    root@macik:~#apt install phpmyadmin
    Po odsúhlasení inštalácie sa najprv stiahnu všetky potrebné inštalačné balíčky. Tie sa potom rozbalia na disk. Nakoniec sa spustí konfigurátor inštalácie balíka phpmyadmin Ten poznáte podľa modrej obrazovky a bude sa pýtať ktorý web server používate. Dajú sa nastaviť dva najčastejšie web servery apache2 a lighttpd Nastavovanie sa aktivuje medzerníkom a zobrazí sa tam hviezdička. Šipkami sa dá chodiť hore dolu a medzerníkom sa dá konfigurácia zapnúť a vypnúť. Po nastavení ako je to na obrázku sa klávesou Tab prejde na OK a pokračuje sa v inštalácii

    Naásledne treba ešte nakonfigurovať prístupové heslo k databáze. Najprv je treba odsúhlasiť, tento dialóg

    A potom už len dvakrát zadať heslo pre databázu ktorá sa vytvorí pre phpmyadmin. Tiež doporučujem zadať heslo 123456