Głównym celem tego zadania jest przeniesienie studenta z roli użytkownika bazy danych do roli świadomego administratora, który rozumie wewnętrzną architekturę i mechanizmy działania serwera MySQL/MariaDB. Zadanie koncentruje się na dogłębnej eksploracji i zrozumieniu przeznaczenia trzech kluczowych, systemowych baz danych: `information_schema`, `mysql` oraz `performance_schema`. Student nauczy się, w jaki sposób serwer przechowuje i zarządza metadanymi (czyli "danymi o danych"), jak zorganizowane są informacje o kontach użytkowników i ich uprawnieniach, a także gdzie szukać informacji diagnostycznych dotyczących wydajności. Zrozumienie tych wewnętrznych struktur jest absolutnie kluczowe dla zaawansowanej administracji, optymalizacji zapytań, automatyzacji zadań oraz skutecznego rozwiązywania problemów. To zadanie otwiera drzwi do postrzegania serwera nie jako "czarnej skrzynki", ale jako transparentnego i możliwego do analizy systemu.
Student, po opanowaniu podstawowych operacji, zaczyna zadawać sobie bardziej zaawansowane pytania: "Skąd serwer wie, jakie tabele istnieją w mojej bazie?", "Gdzie fizycznie zapisane są informacje o uprawnieniach, które nadawałem?", "Jak mogę sprawdzić, które zapytania najbardziej obciążają serwer?". Aby znaleźć odpowiedzi, postanawia przeprowadzić szczegółową analizę wewnętrznych mechanizmów serwera. Loguje się do konsoli MySQL na konto `root`, które daje mu pełny wgląd w system. Jego pierwszym krokiem jest wykonanie polecenia `SHOW DATABASES;`, które tym razem analizuje nie pod kątem swoich baz, ale właśnie pod kątem tych systemowych: `information_schema`, `mysql`, `performance_schema` i `sys`. Jego podróż w głąb serwera rozpoczyna się od `information_schema`. Po przełączeniu się na tę bazę (`USE information_schema;`), wykonuje `SHOW TABLES;` i jest zdumiony liczbą dostępnych widoków. Postanawia zbadać kilka z nich. Najpierw odpytuje widok `TABLES`, filtrując wyniki tak, aby zobaczyć tylko informacje o tabelach w jego bazie `test_hotel`. Odkrywa tam takie informacje jak silnik przechowujący dane (np. InnoDB) czy przybliżoną liczbę wierszy. Następnie, z ciekawością analizuje widok `COLUMNS`, aby zobaczyć, jak serwer przechowuje szczegółowe informacje o każdej kolumnie w jego tabelach – jej typie danych, wartości domyślnej czy dopuszczalności wartości `NULL`. To doświadczenie daje mu olśnienie: każda operacja `CREATE TABLE` czy `ALTER TABLE` to w rzeczywistości modyfikacja metadanych zapisanych właśnie w `information_schema`. Kolejnym krokiem jest zbadanie bazy `mysql`. Student wie, że to tutaj znajduje się serce systemu bezpieczeństwa. Zamiast ogólnego zapytania, tym razem pisze bardziej szczegółowe, aby zobaczyć nie tylko nazwy użytkowników i hosty, ale także kolumny z uprawnieniami, takie jak `Select_priv` czy `Insert_priv`. Obserwując wiersz dla stworzonego wcześniej użytkownika `hotel_app`, widzi, że wartości w tych kolumnach to 'Y' (Yes), co jest bezpośrednim odzwierciedleniem wykonanego przez niego polecenia `GRANT`. Na koniec, zagląda do `performance_schema`. Chociaż wie, że pełna analiza tej bazy wymaga zaawansowanej wiedzy, wykonuje proste zapytanie do tabeli `events_statements_summary_by_digest`, aby zobaczyć zagregowane statystyki wykonanych zapytań. Odkrywa tam, że serwer śledzi każde unikalne zapytanie, liczy, ile razy zostało wykonane i mierzy średni czas jego wykonania. To daje mu przedsmak potężnych możliwości, jakie drzemią w narzędziach do optymalizacji wydajności.
Zaloguj się na konto `root` i wyświetl listę wszystkich baz danych. Zidentyfikuj te, które nie zostały przez Ciebie utworzone – to są właśnie bazy systemowe.
-- To polecenie jest punktem wyjścia do naszej eksploracji. SHOW DATABASES;
`information_schema` to zbiór widoków (wirtualnych tabel) tylko do odczytu, które opisują wszystkie inne obiekty na serwerze. Jest to standard ANSI SQL, więc wiedza o nim jest przenośna między różnymi systemami baz danych.
-- Przełączamy się na bazę metadanych. USE information_schema; -- Wyświetlamy informacje o wszystkich tabelach w naszej bazie 'test_hotel'. -- Możemy zobaczyć m.in. silnik przechowujący dane i kiedy tabela była ostatnio aktualizowana. SELECT TABLE_NAME, ENGINE, UPDATE_TIME FROM TABLES WHERE TABLE_SCHEMA = 'test_hotel'; -- Teraz zajrzyjmy głębiej - analiza struktury kolumn w tabeli 'pokoje'. -- To zapytanie pokaże nam typ danych każdej kolumny, jej pozycję w tabeli i wartość domyślną. SELECT COLUMN_NAME, ORDINAL_POSITION, COLUMN_TYPE, COLUMN_DEFAULT FROM COLUMNS WHERE TABLE_SCHEMA = 'test_hotel' AND TABLE_NAME = 'pokoje';
Baza `mysql` zawiera tabele, które przechowują wszystkie informacje o użytkownikach, hasłach i uprawnieniach. Jest to krytyczny element serwera, a jej bezpośrednia modyfikacja jest ryzykowna i niezalecana (należy używać poleceń `GRANT`, `CREATE USER` itp.).
-- Przełączamy się na bazę zarządzającą serwerem. USE mysql; -- Wyświetlamy szczegółowe informacje o uprawnieniach dla użytkownika 'hotel_app'. -- Kolumny *_priv (privileges) przechowują informację 'Y' (Yes) lub 'N' (No). SELECT User, Host, Select_priv, Insert_priv, Update_priv, Delete_priv, Alter_priv FROM user WHERE User = 'hotel_app';
`performance_schema` to zaawansowany silnik monitorujący, który zbiera dane o niskopoziomowych zdarzeniach na serwerze w czasie rzeczywistym. Jego analiza pozwala na precyzyjną diagnostykę "wąskich gardeł" wydajności.
-- Przełączamy się na bazę danych o wydajności.
USE performance_schema;
-- Wyświetlamy podsumowanie wykonanych zapytań, posortowane od najdłużej trwających.
-- To zapytanie może pomóc zidentyfikować zapytania, które wymagają optymalizacji.
SELECT
    DIGEST_TEXT AS query,
    COUNT_STAR AS exec_count,
    (SUM_TIMER_WAIT / 1000000000) AS sum_latency_ms,
    (AVG_TIMER_WAIT / 1000000000) AS avg_latency_ms
FROM events_statements_summary_by_digest
ORDER BY sum_latency_ms DESC
LIMIT 10;
            Eksploracja systemowych baz danych jest jak zajrzenie do maszynowni statku – pozwala zrozumieć, co napędza cały system i jak diagnozować jego problemy. To zadanie pokazało, że serwer MySQL/MariaDB jest transparentnym systemem, który sam siebie opisuje i dostarcza potężnych narzędzi do autodiagnostyki. Zrozumienie roli `information_schema` zmienia perspektywę z ręcznego zarządzania na możliwość pełnej automatyzacji i generowania dynamicznych raportów o strukturze bazy. Analiza bazy `mysql` demistyfikuje zarządzanie uprawnieniami, pokazując, że polecenia takie jak `GRANT` są w rzeczywistości bezpiecznym interfejsem do modyfikacji konkretnych tabel systemowych. Wreszcie, nawet pobieżne zapoznanie się z `performance_schema` otwiera oczy na świat optymalizacji wydajności, pokazując, że serwer sam zbiera dane niezbędne do znalezienia i naprawienia wolno działających zapytań. Kluczowym wnioskiem jest to, że świadomy administrator i deweloper nie traktuje serwera jako czarnej skrzynki. Potrafi on, w razie potrzeby, zajrzeć "pod maskę", aby zrozumieć, dlaczego system zachowuje się w określony sposób, co jest niezbędne do budowania i utrzymywania wydajnych i niezawodnych aplikacji.