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.
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.
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;
  
  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.
information_schema - Spis treści serweraTo baza danych, która opisuje wszystkie inne bazy danych. Nie zawiera Twoich danych (książek, czytelników), ale metadane, czyli "dane o danych".
SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'biblioteka';
    
    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)".FROM information_schema.TABLES - Wskazujemy, skąd ma wziąć te dane: z tabeli o nazwie TABLES, która znajduje się w bazie information_schema.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.
mysql - Centrum sterowania serweremTo 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.
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.
SELECT User, Host, password_last_changed
FROM mysql.user;
    
    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.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.
performance_schema i sys - Diagnostyka serweraTe 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.
performance_schema jest jak podłączenie komputera diagnostycznego do silnika. Dostarcza tysięcy surowych, technicznych parametrów na sekundę. Bardzo szczegółowe, ale trudne do odczytania dla laika.sys jest jak deska rozdzielcza w samochodzie. Przetwarza te surowe dane i pokazuje je w zrozumiałej formie: "prędkość", "temperatura silnika", "poziom paliwa".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;
    
    SELECT query, exec_count, total_latency - Chcemy zobaczyć treść zapytania, liczbę jego wykonań i łączny czas, jaki zajęło.FROM sys.statement_analysis - Korzystamy z gotowego "raportu" (widoku) o nazwie statement_analysis.ORDER BY exec_count DESC - Sortujemy wyniki tak, aby zapytania wykonywane najczęściej znalazły się na górze listy (DESC - malejąco).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.
Zrozumienie roli baz systemowych zmienia postrzeganie serwera z "czarnej skrzynki" w narzędzie, którego działanie możemy analizować i kontrolować.
| Schemat | Analogia | Główne zadanie | 
|---|---|---|
| information_schema | Spis treści / Mapa | Dostarczanie informacji o strukturze baz i tabel (metadane). | 
| mysql | Panel sterowania / Mózg | Zarządzanie użytkownikami, hasłami i uprawnieniami. | 
| performance_schema | Surowe dane diagnostyczne | Zbieranie niskopoziomowych danych o wydajności serwera. | 
| sys | Czytelna deska rozdzielcza | Prezentowanie danych z performance_schema w przystępnej formie. |