Kopia struktury i pełna kopia bazy, eksport SQL oraz próbne przywrócenie w oddzielnej bazie. Kontrola spójności, diagnostyka problemów i ograniczenia naprawy tabel InnoDB. Lekcja 9.2 kursu INF.03.
Kopia zapasowa bazy danych to niezależny zapis pozwalający odtworzyć określony stan jej struktury lub danych. Na egzaminie trzeba utworzyć eksport, sprawdzić jego zakres, przywrócić dane i zdiagnozować niespójność. Najważniejszym sprawdzeniem kopii jest udane odtworzenie w kontrolowanym miejscu, a nie samo pojawienie się pliku SQL.
Co właściwie jest kopiowane
Struktura bazy opisuje tabele, kolumny, typy, klucze i inne obiekty. Dane to rekordy zapisane w tych strukturach. Kopia samej struktury pozwala utworzyć puste tabele, lecz nie odtworzy zamówień klientów. Kopia samych danych wymaga pasującej struktury w miejscu docelowym. W poleceniu egzaminacyjnym trzeba odczytać, czy chodzi o strukturę, dane, obie części czy pojedynczą tabelę.
Kopia logiczna zapisuje instrukcje odtwarzające obiekty i rekordy, na przykład CREATE TABLE i INSERT. Można ją obejrzeć w edytorze tekstowym i przenieść do zgodnego środowiska. Kopia fizyczna obejmuje pliki używane przez silnik bazy i wymaga właściwej procedury dla tego silnika. Przypadkowe skopiowanie katalogu pracującej bazy nie gwarantuje spójności plików. Do ćwiczeń używamy eksportu logicznego.
Eksport jest czynnością zapisania wybranej zawartości na zewnątrz. Staje się elementem kopii zapasowej, jeśli obejmuje potrzebny zakres, jest bezpiecznie przechowywany i można go odtworzyć. CSV (Comma-Separated Values, wartości rozdzielane przecinkami) jest przydatny do wymiany rekordów, ale sam nie zachowuje całej definicji bazy, relacji i wszystkich typów tak jak odpowiedni eksport SQL.
Eksport w phpMyAdmin i narzędziu konsolowym
W phpMyAdmin najpierw wybierz bazę lub tabelę, a potem eksport. Tryb własny pozwala wskazać tabele oraz zaznaczyć strukturę i dane. Dla pełnej kopii ćwiczeniowej wybierz format SQL i obie części. Dla kopii struktury pozostaw strukturę bez rekordów. Przed pobraniem sprawdź zakres w podsumowaniu, ponieważ wybranie jednej tabeli w drzewie może ograniczyć eksport do niej.
Program mysqldump tworzy kopię logiczną MySQL z konsoli systemowej. To polecenie powłoki, nie SQL do wklejenia w zakładkę zapytań. Poniższy przykład zakłada istniejącą bazę sklep, konto operator z potrzebnymi prawami i tabele InnoDB. Znak > przekierowuje wynik do pliku.
mysqldump -u operator -p --single-transaction --no-tablespaces --set-gtid-purged=OFF sklep > sklep-kopia.sql
mysqldump -u operator -p --no-data --no-tablespaces --set-gtid-purged=OFF sklep > sklep-struktura.sql
Opcja -p powoduje poproszenie o hasło, bez wpisywania go jawnie w treść komendy. --no-data pomija rekordy. --no-tablespaces pomija informacje o przestrzeniach tabel, a --set-gtid-purged=OFF pomija ustawianie historii identyfikatorów transakcji przy tym prostym przenoszeniu bazy. To przykład dla MySQL, nie konfiguracja odtwarzania replikacji. Dostępne opcje trzeba dopasować do wersji programu.
W MariaDB właściwym narzędziem jest mariadb-dump; nazwa zgodności mysqldump bywa nadal dostępna, lecz nie każda opcja MySQL ma tam ten sam odpowiednik. Nie kopiuj bez sprawdzenia opcji dotyczącej GTID do klienta MariaDB. phpMyAdmin pozwala wykonać ćwiczenie bez rozstrzygania nazwy programu konsolowego. Podstawy eksportu opisuje także lekcja o skryptach SQL. Spójny moment i pełny zakres
Opcja --single-transaction przygotowuje spójny odczyt danych tabel transakcyjnych, takich jak InnoDB. W czasie takiego eksportu nie należy równolegle zmieniać ich struktury. Nie daje ona tej samej gwarancji dla wszystkich silników. Szczegóły i wymagane uprawnienia opisuje dokumentacja mysqldump. Pełna kopia potrzebna do odtworzenia usługi może wymagać więcej niż tabel. Procedury składowane to zapisane w bazie programy, zdarzenia wykonują zadania według harmonogramu, a wyzwalacze reagują na określone operacje. Jeśli projekt ich używa, trzeba sprawdzić, czy eksport je zawiera. Opcje --routines i --events służą do dołączenia procedur oraz zdarzeń w mysqldump. Konto eksportujące musi mieć wymagane prawa do kopiowanych obiektów.
Zapisz datę, nazwę źródła, wersję serwera i zakres kopii. Ogranicz dostęp do pliku, ponieważ może zawierać dane osobowe, skróty kryptograficzne haseł i informacje biznesowe. Nie umieszczaj go w publicznym katalogu strony. Kopia na tym samym dysku chroni przed częścią pomyłek, lecz nie przed utratą całego nośnika. Potrzebne są niezależne kopie i ustalony sposób ich przechowywania.
Próbne przywracanie
Przywracanie to odtworzenie stanu z kopii. Najpierw przygotuj oddzielną bazę testową i upewnij się, że plik nie zawiera instrukcji wybierającej lub usuwającej inną bazę. Eksport może zawierać DROP TABLE, czyli usuwanie istniejącej tabeli. Wgrywanie go bez przeczytania zakresu do działającej bazy może nadpisać nowsze dane.
W przykładzie eksport utworzono bez opcji --databases, a plik nie zawiera USE sklep ani tworzenia oryginalnej bazy. Administrator tworzy pustą bazę sklep_proba i przydziela kontu operator potrzebny dostęp. Następnie w konsoli można skierować plik do tej bazy:
mysql -u operator -p sklep_proba < sklep-kopia.sql
W phpMyAdmin wybiera się bazę sklep_proba i używa importu pliku SQL. Po operacji odczytaj komunikaty, a nie tylko kolor paska postępu. Zweryfikuj listę tabel, definicje kolumn, liczbę rekordów i kilka znanych wartości. Jeżeli źródło miało pięć produktów, to pięć produktów po imporcie jest jednym z dowodów, lecz nie dowodzi jeszcze zgodności wszystkich relacji i kwot.
Dobra próba odtworzenia sprawdza także działanie aplikacji na danych testowych. Czy lista pokazuje właściwe nazwy, czy zamówienie wskazuje istniejącego klienta, czy znaki polskie są poprawne? Kontrola sumy kontrolnej pliku wykrywa zmianę pliku po jego utworzeniu, ale nie dowodzi, że eksport od początku obejmował wszystko. Kontrola pliku i kontrola odtworzonej bazy uzupełniają się.
Spójność i diagnoza
Spójność bazy oznacza zgodność danych z przyjętymi regułami. Klucz obcy może zabronić zamówienia wskazującego nieistniejącego klienta. Ograniczenie unikalności może zabronić powtórzenia identyfikatora. Reguły biznesowe, na przykład dodatnia liczba sztuk, także wymagają sprawdzenia. Mechanizmy strukturalne opisują lekcje o bazach. Nieprawidłowe połączenie, błędne zapytanie i uszkodzona tabela to różne diagnozy. Najpierw zapisz komunikat oraz okoliczności. Sprawdź, czy działa usługa, czy konto może się połączyć, czy istnieje baza i czy proste zapytanie działa. Potem porównaj strukturę z oczekiwanym schematem i sprawdź dziennik błędów serwera. Brak dostępu nie jest dowodem uszkodzenia plików.
CHECK TABLE (SPRAWDŹ TABELĘ) jest poleceniem diagnostycznym, którego zakres zależy od silnika. Nie dowodzi poprawności wszystkich reguł biznesowych. Przed czynnościami naprawczymi zabezpiecza się dostępne dane oraz kopie i ustala przyczynę awarii. Dalsze zapisy na uszkodzonym środowisku mogą utrudnić odzyskanie informacji.
REPAIR TABLE (NAPRAW TABELĘ) nie jest uniwersalnym poleceniem odtwarzającym dane. Nie obsługuje naprawy tabel InnoDB. Dla nich korzysta się z mechanizmów odtwarzania silnika, sprawdzonych kopii i procedury dobranej do komunikatu oraz wersji. Ograniczenia podaje dokumentacja REPAIR TABLE. Nie uruchamia się losowych poleceń naprawczych tylko dlatego, że panel nazywa przycisk „Napraw”. Na egzaminie
Gdy polecenie wymaga kopii struktury, sprawdź obecność definicji i brak rekordów. Gdy wymaga pełnego eksportu, potrzebne są definicje i dane. Przy imporcie pojedynczej tabeli wybierz właściwy zakres, format oraz bazę docelową. Po odtworzeniu przygotuj dowód wyniku, a nie wyłącznie zrzut okna wyboru pliku.
Pułapka: niepusty plik SQL nie dowodzi poprawności kopii. Odtworzenie w oddzielnej bazie i kontrola wyników sprawdzają, czy można z niego rzeczywiście skorzystać.
W pytaniu o naprawę zwróć uwagę na silnik i rodzaj błędu. Nie usuwaj bazy, aby sprawdzić, czy kopia działa. Próba w oddzielnym miejscu pozwala zachować oryginał i porównać rezultat.
Ściąga
kopia struktury
definicje bez rekordów
pełny eksport SQL
potrzebne definicje i dane
eksport jednej tabeli
zaznaczony właściwy zakres
--single-transaction
spójny odczyt InnoDB, bez zmian struktury
przywrócenie próbne
oddzielna baza, kontrola instrukcji USE i DROP
weryfikacja
struktura, liczby, wartości, relacje i aplikacja
CHECK TABLE
diagnostyka zależna od silnika
REPAIR TABLE
nie naprawia InnoDB
Pobierz ściągę PDF