Zadanie 5 - Zaglądamy pod maskę serwera

Wprowadzenie: Czym są bazy systemowe?

Analogia: Nowy telefon

Wyobraź sobie, że kupujesz nowy smartfon. Nie jest on pusty – ma już zainstalowany system operacyjny (np. Android), aplikację do kontaktów, ustawienia systemowe i inne narzędzia, które pozwalają mu działać. Nie przechowujesz w nich swoich zdjęć, ale bez nich telefon byłby bezużyteczny.

Podobnie jest z serwerem baz danych. Po instalacji zawiera on bazy (schematy) systemowe, które są jego "systemem operacyjnym". Przechowują one informacje o użytkownikach, uprawnieniach, strukturze innych baz danych i dane o wydajności. W tym zadaniu nauczymy się je odczytywać, aby lepiej zrozumieć, jak działa nasz serwer.

Cel zadania

Celem tego ćwiczenia jest zbadanie i zrozumienie roli, jaką pełnią domyślne bazy danych w serwerze MariaDB/MySQL. Nauczysz się, co przechowuje każda z tych baz i jak wyciągać z nich użyteczne informacje za pomocą zapytań SQL. Zrozumienie tych mechanizmów jest fundamentalne dla każdego administratora baz danych.

Krok 1: Pierwsze spojrzenie - wyświetlenie wszystkich baz danych

Zaloguj się do serwera za pomocą HeidiSQL (lub innego klienta GUI). Pierwszym poleceniem, które wykonamy, będzie wyświetlenie wszystkich "szuflad" w naszej "szafie na dane".


SHOW DATABASES;
  
Analiza polecenia

SHOW DATABASES to proste polecenie, które prosi serwer: "Pokaż mi listę wszystkich baz danych (schematów), do których mam dostęp".

W wyniku zobaczysz listę, która będzie zawierać co najmniej cztery pozycje: information_schema, mysql, performance_schema, sys oraz bazy, które stworzyłeś sam, np. biblioteka. Teraz przyjrzymy się każdej z nich.

Schemat information_schema - Spis treści serwera

To baza danych, która opisuje wszystkie inne bazy danych. Nie zawiera Twoich danych (książek, czytelników), ale metadane, czyli "dane o danych".

Zadanie: Dowiedz się, jakie tabele znajdują się w Twojej bazie "biblioteka"

SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'biblioteka';
    
Wyjaśnienie krok po kroku:
  1. SELECT TABLE_NAME, ENGINE - Mówimy serwerowi: "Interesują mnie dwie kolumny: jedna o nazwie 'TABLE_NAME' (nazwa tabeli) i druga o nazwie 'ENGINE' (silnik przechowywania)".
  2. FROM information_schema.TABLES - Wskazujemy, skąd ma wziąć te dane: z tabeli o nazwie TABLES, która znajduje się w bazie information_schema.
  3. WHERE TABLE_SCHEMA = 'biblioteka' - Dodajemy filtr: "Ale nie pokazuj mi wszystkich tabel z całego serwera! Pokaż mi tylko te wiersze, w których kolumna 'TABLE_SCHEMA' (nazwa bazy) ma wartość 'biblioteka'".

Wniosek: Dzięki information_schema możesz pisać programy, które "uczą się" struktury bazy danych, np. aby dynamicznie generować formularze na podstawie kolumn w tabeli.

Schemat mysql - Centrum sterowania serwerem

To najważniejsza baza systemowa. Przechowuje konta użytkowników, ich hasła i uprawnienia. Kiedy wykonujesz polecenie CREATE USER lub GRANT, serwer w rzeczywistości dodaje lub modyfikuje wiersze w tabelach tej bazy.

Uwaga! Strefa niebezpieczna!

Nigdy nie modyfikuj ręcznie danych w bazie mysql za pomocą UPDATE czy DELETE, chyba że jesteś absolutnie pewien tego, co robisz. Błąd może trwale uszkodzić serwer i zablokować do niego dostęp! Do zarządzania użytkownikami zawsze używaj poleceń GRANT, REVOKE, CREATE/DROP USER.

Zadanie: Sprawdź, jakie konta użytkowników istnieją na serwerze

SELECT User, Host, password_last_changed
FROM mysql.user;
    
Wyjaśnienie krok po kroku:
  1. SELECT User, Host, password_last_changed - Chcemy zobaczyć trzy informacje: nazwę użytkownika, host (komputer, z którego może się łączyć) oraz datę ostatniej zmiany hasła.
  2. FROM mysql.user - Wszystkie te informacje znajdują się w tabeli user w bazie mysql.

Wniosek: Tabela mysql.user to centralny rejestr tożsamości na Twoim serwerze. Audyt zawartości tej tabeli to jeden z pierwszych kroków w zabezpieczaniu bazy danych.

Schematy performance_schema i sys - Diagnostyka serwera

Te dwie bazy danych działają razem i służą do monitorowania wydajności i diagnozowania problemów. Są przeznaczone dla bardziej zaawansowanych użytkowników.

Analogia: Diagnostyka samochodowa
Zadanie: Znajdź 5 najczęściej wykonywanych zapytań na serwerze

Użyjemy schematu sys, aby uzyskać czytelny raport.


SELECT query, exec_count, total_latency
FROM sys.statement_analysis
ORDER BY exec_count DESC
LIMIT 5;
    
Wyjaśnienie krok po kroku:
  1. SELECT query, exec_count, total_latency - Chcemy zobaczyć treść zapytania, liczbę jego wykonań i łączny czas, jaki zajęło.
  2. FROM sys.statement_analysis - Korzystamy z gotowego "raportu" (widoku) o nazwie statement_analysis.
  3. ORDER BY exec_count DESC - Sortujemy wyniki tak, aby zapytania wykonywane najczęściej znalazły się na górze listy (DESC - malejąco).
  4. LIMIT 5 - Ograniczamy wynik tylko do pierwszych 5 wierszy po posortowaniu.

Wniosek: Analiza zapytań za pomocą schematu sys to jedno z najważniejszych narzędzi do optymalizacji wydajności aplikacji. Pozwala szybko znaleźć zapytania, które najbardziej obciążają serwer.

Podsumowanie

Zrozumienie roli baz systemowych zmienia postrzeganie serwera z "czarnej skrzynki" w narzędzie, którego działanie możemy analizować i kontrolować.

SchematAnalogiaGłówne zadanie
information_schemaSpis treści / MapaDostarczanie informacji o strukturze baz i tabel (metadane).
mysqlPanel sterowania / MózgZarządzanie użytkownikami, hasłami i uprawnieniami.
performance_schemaSurowe dane diagnostyczneZbieranie niskopoziomowych danych o wydajności serwera.
sysCzytelna deska rozdzielczaPrezentowanie danych z performance_schema w przystępnej formie.