Ćwiczenia SQL – Kopie zapasowe, import i diagnostyka bazy

Teoria Kopie zapasowe, import i diagnostyka

Dlaczego kopie zapasowe? Kopia zapasowa bazy (backup) to zrzut struktury i danych, który pozwala odtworzyć bazę po awarii czy błędnej operacji użytkownika. Dobry backup powinien być wykonywany regularnie, przechowywany poza serwerem i testowany przez odtworzenie na środowisku testowym.

mysqldump to standardowe narzędzie MySQL do tworzenia kopii w postaci pliku tekstowego z poleceniami SQL (CREATE TABLE, INSERT). Można nim tworzyć kopie samej struktury, danych lub wszystkiego razem.

Import odbywa się z użyciem klienta mysql, który odczytuje plik .sql i wykonuje zawarte w nim instrukcje. Przed importem docelowa baza powinna istnieć (lub być utworzona).

Diagnostyka korzysta z narzędzi typu CHECK TABLE, REPAIR TABLE, mysqlcheck oraz z logu błędów serwera. Pozwala wykryć uszkodzone tabele, niespójne indeksy czy błędy odczytu/zapisu.

1. Tworzenie kopii zapasowych struktury bazy danych

Teoria: Zrzut samej struktury bazy służy do przeniesienia schematu (tabele, klucze, indeksy) bez danych, np. na inne środowisko lub do wersjonowania w repozytorium. Opcja --no-data w mysqldump pomija instrukcje INSERT, zostawiając tylko definicje CREATE TABLE.

Polecenie: Utwórz kopię struktury bazy danych projekty_it (bez danych) i zapisz ją w pliku backup_struktura.sql.
-- Tworzenie kopii struktury bazy (bez danych)
mysqldump -u root -p --no-data projekty_it > backup_struktura.sql;

-- Alternatywnie w SQL (pojedyncze tabele):
SHOW CREATE TABLE Projekty;
SHOW CREATE TABLE Klienci;
  
Efekt: Powstaje plik backup_struktura.sql zawierający tylko definicje tabel, kluczy i relacji. Kopia może być użyta do odtworzenia struktury bazy w nowym środowisku (np. na serwerze testowym).

2. Przywracanie danych z kopii zapasowej

Teoria: Przywracanie (restore) polega na wczytaniu pliku SQL do serwera MySQL. Najczęściej najpierw odtwarza się strukturę (CREATE TABLE), a następnie dane (INSERT). Ważne jest, by przywracać kopie na zgodną lub nowszą wersję serwera oraz mieć bazę o odpowiedniej nazwie.

Polecenie: Przywróć bazę danych projekty_it z pliku backup_struktura.sql oraz pliku danych backup_dane.sql.
-- (opcjonalnie) utworzenie pustej bazy przed przywróceniem:
CREATE DATABASE projekty_it CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Przywracanie struktury bazy
mysql -u root -p projekty_it < backup_struktura.sql;

-- Przywracanie danych
mysql -u root -p projekty_it < backup_dane.sql;
  
Efekt: Baza projekty_it zostaje przywrócona do stanu z momentu utworzenia kopii. Wszystkie tabele i rekordy zostają odtworzone, co umożliwia szybkie odzyskanie środowiska pracy po awarii lub błędnym usunięciu danych.

3. Importowanie i eksportowanie bazy danych

Teoria: Eksport bazy (dump) do pliku SQL pozwala przenieść ją na inny serwer lub wykonać kopię „na żądanie”. Import wykorzystuje ten sam plik do odtworzenia bazy pod inną nazwą, np. projekty_backup, co jest wygodne przy testowaniu zmian bez ryzyka dla produkcji.

Polecenie: Wyeksportuj pełną bazę projekty_it do pliku SQL, a następnie zaimportuj ją do nowej bazy projekty_backup.
-- Eksport bazy do pliku (struktura + dane)
mysqldump -u root -p projekty_it > projekty_full.sql;

-- Tworzenie nowej bazy
CREATE DATABASE projekty_backup CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Import do nowej bazy
mysql -u root -p projekty_backup < projekty_full.sql;
  
Baza źródłowaBaza docelowaOperacja
projekty_itprojekty_backupEksport → Import (klon bazy)

4. Diagnozowanie i naprawa bazy danych (logi, narzędzia naprawcze)

Teoria: Narzędzia diagnostyczne sprawdzają spójność tabel i indeksów. CHECK TABLE wykrywa problemy, REPAIR TABLE próbuje je naprawić (np. w MyISAM), a log błędów MySQL zapisuje informacje o uszkodzeniach, przerwach w pracy serwera czy błędach zapytań. Program mysqlcheck pozwala wykonywać te operacje zbiorczo na wielu tabelach.

Polecenie: Sprawdź spójność i napraw błędy w tabelach bazy projekty_it z wykorzystaniem poleceń diagnostycznych MySQL.
-- Sprawdzenie integralności tabel
CHECK TABLE Projekty;
CHECK TABLE Klienci;

-- Naprawa uszkodzonych tabel (np. MyISAM)
REPAIR TABLE Projekty;
REPAIR TABLE Klienci;

-- Przykład użycia mysqlcheck dla całej bazy:
mysqlcheck --auto-repair -o projekty_it -u root -p

-- Analiza logów serwera MySQL (znalezienie ścieżki do logu błędów)
SHOW VARIABLES LIKE 'log_error';
  
Efekt: Baza danych zostaje przetestowana pod kątem spójności, a ewentualne błędy w strukturze tabel zostają naprawione. Administrator może też przejrzeć logi błędów, aby zdiagnozować źródło problemów (np. awarie dysku, przerwane transakcje).

5. Skróty ważnych komend

Podsumowanie: W praktyce INF.03 najważniejsze jest opanowanie: tworzenia kopii zapasowych (mysqldump), przywracania bazy (mysql), diagnostyki i naprawy (CHECK/REPAIR/mysqlcheck) oraz czytania logów błędów. Poniższa tabelka to szybka ściąga z najczęściej używanymi poleceniami.

Cel Polecenie / narzędzie Uwagi
Kopia samej struktury mysqldump --no-data projekty_it > backup_struktura.sql Tylko definicje tabel, bez rekordów.
Pełny backup bazy mysqldump projekty_it > projekty_full.sql Struktura + dane wszystkich tabel.
Przywracanie z pliku mysql projekty_it < backup_dane.sql Baza docelowa musi istnieć przed importem.
Sprawdzenie tabel CHECK TABLE Projekty; / mysqlcheck -c projekty_it Wykrywa błędy i niespójności struktur.
Naprawa i optymalizacja REPAIR TABLE Projekty;
mysqlcheck --auto-repair -o projekty_it
Naprawa uszkodzonych tabel, uporządkowanie indeksów.