Lekcja 15. Import, eksport, kopia zapasowa i przywracanie bazy danych
ŚredniPo co się tego uczymy?
Serwery się psują, dyski padają, ktoś przypadkiem wykona DELETE bez WHERE (patrz lekcja o DML!). Jedyne, co wtedy ratuje dane, to aktualna kopia zapasowa. Import i eksport to też codzienne narzędzie — np. przenoszenie bazy z komputera do komputera albo na serwer produkcyjny.
Teoria
Eksport to zapisanie całej bazy (struktury i/albo danych) do pliku, najczęściej w formacie .sql (zawierającego same polecenia SQL, które odtwarzają bazę) albo .csv (dane w formie tabelarycznej).
W phpMyAdmin: wybierz bazę → zakładka Eksport → format SQL → Wykonaj. Pobierzesz plik .sql, który zawiera komplet poleceń CREATE TABLE i INSERT odtwarzających całą bazę.
Import to odwrotna operacja: wczytanie pliku .sql (albo .csv) z powrotem do bazy danych. W phpMyAdmin: wybierz bazę (lub utwórz nową) → zakładka Importuj → wskaż plik → Wykonaj.
Kopia zapasowa (ang. backup) to w praktyce regularnie wykonywany eksport całej bazy, przechowywany w bezpiecznym miejscu (nie na tym samym dysku co oryginał!). Przywracanie (ang. restore) to import takiej kopii z powrotem, gdy coś pójdzie nie tak.
Z poziomu samego SQL (bez phpMyAdmin) możesz wczytać dane z pliku CSV poleceniem LOAD DATA INFILE, a strukturę bazy odtworzyć, uruchamiając zapisany wcześniej plik .sql poleceniem SOURCE w konsoli MySQL.
Przykład z życia
Zanim zaczniesz eksperymentować z nową funkcją w bazie sklepu internetowego, robisz jej pełną kopię zapasową. Jeśli coś pójdzie źle — przywracasz bazę z kopii i wracasz do punktu wyjścia, zamiast tracić tygodnie pracy.
Kod (SQL)
-- Wczytanie danych z pliku CSV bezpośrednio do tabeli (uruchamiane w konsoli MySQL)
LOAD DATA INFILE '/sciezka/do/pliku/produkty.csv'
INTO TABLE Produkty
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'
IGNORE 1 ROWS; -- pomija wiersz nagłówka
-- Odtworzenie całej bazy z zapisanego wcześniej pliku .sql (w konsoli MySQL)
SOURCE /sciezka/do/pliku/kopia_zapasowa.sql;
Komentarz i wyjaśnienie kodu
LOAD DATA INFILE to najszybszy sposób wczytania dużej liczby wierszy naraz z pliku CSV — dużo szybszy niż setki pojedynczych poleceń INSERT. IGNORE 1 ROWS pomija pierwszy wiersz pliku, jeśli zawiera on nazwy kolumn zamiast danych. SOURCE działa trochę inaczej niż zwykłe zapytanie — to polecenie konsoli MySQL, które każe jej wykonać CAŁY plik .sql krok po kroku, tak jakby ktoś ręcznie wkleił jego zawartość do okna zapytań.
Ćwiczenie samodzielne
Wyeksportuj (w phpMyAdmin) jedną ze swoich baz ćwiczeniowych do pliku .sql, usuń bazę, a potem zaimportuj ją z powrotem z tego pliku — sprawdź, czy wszystkie dane wróciły.
Zadania do pracy własnej
Zadanie 1. Kopia bezpieczeństwa sklepu
Uwaga przed importem: plik z bazą jest spakowany jako
.gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np.sklep_muzyczny.sql_.gzi import nie przejdzie, zmień nazwę pliku nasklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.Baza do pracy: Sklep muzyczny (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.
- Zaimportuj plik SQL przez phpMyAdmin.
- Sprawdź, czy powstały wszystkie tabele.
- Wykonaj eksport całej bazy do pliku SQL.
- Wykonaj eksport tylko jednej tabeli.
- Usuń bazę testową po wykonaniu kopii.
- Przywróć bazę z wyeksportowanego pliku.
- Porównaj liczbę rekordów przed i po imporcie.
- Zmień nazwę pliku kopii według schematu data_nazwa_bazy.sql.
- Wskaż różnicę między eksportem struktury a eksportem struktury z danymi.
- Opisz, co zrobić, gdy import kończy się błędem kodowania znaków.
Zadanie 2. Kopia i odtworzenie apteki
Uwaga przed importem: plik z bazą jest spakowany jako
.gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np.sklep_muzyczny.sql_.gzi import nie przejdzie, zmień nazwę pliku nasklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.Baza do pracy: Apteka Zdrowie (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.
- Zaimportuj plik SQL przez phpMyAdmin.
- Sprawdź, czy powstały wszystkie tabele.
- Wykonaj eksport całej bazy do pliku SQL.
- Wykonaj eksport tylko jednej tabeli.
- Usuń bazę testową po wykonaniu kopii.
- Przywróć bazę z wyeksportowanego pliku.
- Porównaj liczbę rekordów przed i po imporcie.
- Zmień nazwę pliku kopii według schematu data_nazwa_bazy.sql.
- Wskaż różnicę między eksportem struktury a eksportem struktury z danymi.
- Opisz, co zrobić, gdy import kończy się błędem kodowania znaków.
Zadanie 3. Eksport wybranych tabel siłowni
Uwaga przed importem: plik z bazą jest spakowany jako
.gz. phpMyAdmin w XAMPP przyjmuje takie pliki bez rozpakowywania. Jeżeli po pobraniu nazwa wygląda np.sklep_muzyczny.sql_.gzi import nie przejdzie, zmień nazwę pliku nasklep_muzyczny.sql.gz, a potem wybierz go w zakładce Importuj.Baza do pracy: Siłownia FitZone (.sql.gz). Zaimportuj spakowany plik SQL w XAMPP/phpMyAdmin, a następnie wykonaj zapytania.
- Zaimportuj plik SQL przez phpMyAdmin.
- Sprawdź, czy powstały wszystkie tabele.
- Wykonaj eksport całej bazy do pliku SQL.
- Wykonaj eksport tylko jednej tabeli.
- Usuń bazę testową po wykonaniu kopii.
- Przywróć bazę z wyeksportowanego pliku.
- Porównaj liczbę rekordów przed i po imporcie.
- Zmień nazwę pliku kopii według schematu data_nazwa_bazy.sql.
- Wskaż różnicę między eksportem struktury a eksportem struktury z danymi.
- Opisz, co zrobić, gdy import kończy się błędem kodowania znaków.
Typowe błędy
Częsty błąd to robienie kopii zapasowej na tym samym dysku/serwerze co oryginalne dane — jeśli dysk padnie, tracisz oboje naraz. Drugi błąd: nigdy nieprzetestowana kopia zapasowa — dowiadujesz się, że plik jest uszkodzony, dopiero gdy naprawdę jej potrzebujesz. Trzeci: pomijanie wiersza nagłówka przy LOAD DATA INFILE (bez IGNORE 1 ROWS nazwy kolumn trafią do tabeli jako zwykły, błędny rekord danych).
Nawiązanie do egzaminu zawodowego
To bezpośrednio efekty INF.03.4.5 ("importuje dane z pliku", "eksportuje strukturę bazy danych i dane do pliku") oraz INF.03.4.8 ("tworzy kopię zapasową struktury bazy danych", "weryfikuje poprawność kopii zapasowej", "przywraca dane z kopii zapasowej") — w przykładowym zadaniu praktycznym CKE dla INF.03 zdający dosłownie importuje tabele z pliku .sql do nowo utworzonej bazy w phpMyAdmin.