15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
21.10.2024
2 +1

Jak wykonać kopię zapasową bazy danych MySQL za pomocą MySQL Workbench

MySQL Workbench to wieloplatformowe, wizualne narzędzie do administracji bazami danych, które zawiera wbudowane narzędzie Data Export zdolne do generowania pełnych logicznych kopii zapasowych baz danych MySQL i MariaDB jako przenośne pliki zrzutów .sql. Logiczna kopia zapasowa wytworzona w ten sposób przechwytuje zarówno schemat DDL, jak i dane DML jako zwykłe instrukcje SQL, co czyni ją czytelną dla człowieka, przyjazną dla kontroli wersji i możliwą do przywrócenia na dowolnej kompatybilnej instancji MySQL niezależnie od systemu operacyjnego lub silnika pamięci masowej.

Ten przewodnik przeprowadza przez każdy etap procesu tworzenia kopii zapasowej — od początkowej konfiguracji połączenia przez konfigurację eksportu, weryfikację i automatyzację — obejmując jednocześnie architektoniczne kompromisy, które decydują o tym, czy narzędzie eksportu MySQL Workbench jest właściwym wyborem dla Twojego środowiska.

Dlaczego logiczne kopie zapasowe mają znaczenie (i kiedy nie są wystarczające)

Funkcja Data Export MySQL Workbench opakowuje narzędzie mysqldump w interfejs GUI. Oznacza to, że dane wyjściowe stanowią logiczną kopię zapasową: sekwencyjny zestaw instrukcji SQL (CREATE TABLE, INSERT INTO itp.), które odtwarzają bazę danych od podstaw po odtworzeniu. Kontrastuje to z fizycznymi kopiami zapasowymi (kopiami surowych plików danych tworzonymi przez narzędzia takie jak Percona XtraBackup lub MySQL Enterprise Backup), które kopiują pliki przestrzeni tabel InnoDB bezpośrednio.

AtrybutLogiczna kopia zapasowa (Workbench / mysqldump)Fizyczna kopia zapasowa (XtraBackup)
Format wyjściowyZwykły tekst `.sql`Binarne pliki przestrzeni tabel InnoDB
PrzenośnośćDowolny serwer kompatybilny z MySQLTa sama wersja główna, ta sama architektura systemu operacyjnego
Szybkość tworzenia kopii zapasowej (duże bazy danych)Wolna — serializacja wiersz po wierszuSzybka — kopiowanie na poziomie plików
Szybkość przywracaniaWolna — odtwarza każdą instrukcję SQLSzybka — kopiowanie plików + odtwarzanie po awarii
SzczegółowośćTabela, baza danych lub pełna instancjaPełna instancja lub indywidualna przestrzeń tabel
Gwarancja spójności`–single-transaction` (InnoDB) lub blokada tabeliGorąca kopia zapasowa z dziennikiem redo InnoDB
Czytelna dla człowiekaTakNie
Odpowiednia dlaŚrodowisk deweloperskich/testowych, małych i średnich baz danych, migracjiDużych produkcyjnych baz danych

W przypadku baz danych o rozmiarze kilku gigabajtów na VPS Hosting lub środowisku współdzielonym, logiczna kopia zapasowa za pomocą MySQL Workbench jest całkowicie praktyczna. W przypadku produkcyjnych baz danych o rozmiarze setek gigabajtów należy traktować eksport Workbench jako narzędzie uzupełniające lub przeznaczone dla środowiska deweloperskiego i polegać na fizycznych lub opartych na dzienniku binarnym kopiach zapasowych dla produkcyjnych celów RPO/RTO.

Krok 1: Zainstaluj MySQL Workbench i zweryfikuj kompatybilność

Pobierz MySQL Workbench z oficjalnej strony MySQL Downloads. Instalator jest dostępny dla Windows, macOS i pakietów Linux Ubuntu/Debian/Fedora.

Zgodność wersji ma znaczenie. MySQL Workbench 8.0.x powinien być używany z serwerami MySQL 8.0.x. Używanie znacznie starszego klienta Workbench z nowszym serwerem (lub odwrotnie) może spowodować, że kreator eksportu po cichu pominie obiekty, których nie może przetworzyć, takie jak kolumny generowane, indeksy funkcjonalne lub klauzule walidacji schematu JSON wprowadzone w nowszych wersjach.

Po instalacji potwierdź, że wersja klienta odpowiada wersji serwera:

SELECT VERSION();

Uruchom to zapytanie natychmiast po połączeniu, aby zweryfikować wersję serwera przed przystąpieniem do eksportu.

Krok 2: Utwórz i przetestuj połączenie z serwerem

Uruchom MySQL Workbench. Na ekranie głównym znajdź panel MySQL Connections i kliknij ikonę +, aby otworzyć okno dialogowe konfiguracji połączenia.

Wypełnij następujące pola:

  • Connection Name — opisowa etykieta (np. prod-db-01)
  • Hostname — adres IP serwera lub FQDN
  • Port — domyślnie 3306; zmień, jeśli serwer używa niestandardowego portu
  • Username — konto użytkownika MySQL
  • Password — przechowaj je w magazynie Workbench lub wprowadź podczas łączenia

Kliknij Test Connection. Pomyślny test potwierdza osiągalność TCP i poprawność danych uwierzytelniających. Jeśli test się nie powiedzie, typowe przyczyny to:

  • Parametr bind-address serwera MySQL jest ustawiony na 127.0.0.1, blokując zdalne połączenia
  • Reguła zapory sieciowej blokująca port 3306
  • Konto użytkownika nie ma uprawnienia PROCESS lub SELECT wymaganego do eksportu

Minimalne uprawnienia wymagane do pełnego eksportu:

GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT, PROCESS ON *.* TO 'backup_user'@'%';

Nigdy nie używaj konta root do rutynowych operacji tworzenia kopii zapasowych. Utwórz dedykowanego użytkownika kopii zapasowych tylko do odczytu i przyznaj tylko to, co jest niezbędne.

Krok 3: Otwórz narzędzie Data Export

Po połączeniu przejdź do Server > Data Export w górnym pasku menu. Otwiera to panel Data Export, który jest graficznym interfejsem użytkownika dla mysqldump.

Panel jest podzielony na dwie główne sekcje:

  • Lewy panel — wyświetla wszystkie bazy danych widoczne dla połączonego użytkownika
  • Prawy panel — pokazuje format eksportu, miejsce docelowe wyjścia i zaawansowane opcje

Krok 4: Wybierz bazy danych i tabele

W lewym panelu zaznacz pole wyboru obok każdej bazy danych, którą chcesz uwzględnić w kopii zapasowej. Rozwinięcie węzła bazy danych ujawnia poszczególne tabele, umożliwiając wykonywanie częściowych eksportów — na przykład tworzenie kopii zapasowej tylko tabeli users lub tabeli orders bez eksportowania dużych tabel logowania lub analitycznych, które można odtworzyć.

Praktyczna wskazówka: Jeśli używasz CMS-a takiego jak WordPress lub niestandardowej aplikacji na Shared Web Hosting, zazwyczaj masz jedną bazę danych aplikacji. Wybierz ją w całości. Jeśli zarządzasz aplikacją wielodostępną z dziesiątkami baz danych na Dedicated Server, rozważ tworzenie skryptów eksportów dla poszczególnych baz danych zamiast eksportowania wszystkiego przez GUI w jednym przebiegu.

Krok 5: Skonfiguruj opcje eksportu

Ten krok zawiera najważniejsze decyzje w całym procesie.

Typ zawartości eksportu

W sekcji Objects to Export wybierz, co będzie zawierał zrzut:

  • Dump Structure and Data — eksportuje zarówno DDL (CREATE TABLE, CREATE VIEW, procedury składowane, wyzwalacze, zdarzenia), jak i wszystkie dane wierszy. To właściwy wybór dla kompletnej, możliwej do przywrócenia kopii zapasowej.
  • Dump Data Only — eksportuje tylko instrukcje INSERT. Używaj tego podczas migracji danych do już istniejącego schematu.
  • Dump Structure Only — eksportuje tylko DDL. Przydatne do replikowania schematu do środowiska testowego bez kopiowania wrażliwych danych produkcyjnych.

Miejsce docelowe wyjścia

  • Export to Dump Project Folder — tworzy jeden plik .sql na tabelę wewnątrz katalogu. Przydatne, gdy trzeba selektywnie przywracać poszczególne tabele, ale dla dużych baz danych generuje dziesiątki plików.
  • Export to Self-Contained File — zapisuje cały eksport do pojedynczego pliku .sql. To standardowy wybór dla większości scenariuszy tworzenia kopii zapasowych, ponieważ tworzy jeden artefakt, który jest łatwy do skompresowania, przesłania i przechowywania.

Kliknij Browse, aby ustawić ścieżkę wyjściową. Wybierz lokalizację poza katalogiem głównym serwera WWW i najlepiej na osobnym woluminie od katalogu danych bazy danych.

Zaawansowane opcje (krytyczne dla spójności)

Kliknij Advanced Options, aby wyświetlić podstawowe flagi mysqldump. Zwróć szczególną uwagę na:

  • --single-transaction — opakowuje cały eksport InnoDB w jedną transakcję z powtarzalnym odczytem, tworząc spójną migawkę bez blokowania tabel. Jest to niezbędne dla działających produkcyjnych baz danych używających InnoDB. Włącz tę opcję.
  • --routines — zawiera procedury składowane i funkcje. Domyślnie wyłączone w niektórych wersjach Workbench.
  • --events — zawiera zaplanowane zdarzenia.
  • --triggers — domyślnie uwzględnione; sprawdź, czy jest zaznaczone.
  • --hex-blob — eksportuje kolumny BLOB, BINARY i VARBINARY jako ciągi szesnastkowe, zapobiegając uszkodzeniu kodowania podczas przywracania w systemach z różnymi domyślnymi zestawami znaków.

Jeśli eksportujesz bazę danych, która używa klauzul DEFINER powiązanych z określonym użytkownikiem (powszechne w przypadku widoków i procedur składowanych), pamiętaj, że przywrócenie zrzutu na innym serwerze zakończy się niepowodzeniem, jeśli ten użytkownik nie istnieje. Usuń lub zastąp klauzule DEFINER przed przywróceniem:

sed 's/DEFINER=[^ ]* //g' original_dump.sql > cleaned_dump.sql

Krok 6: Wykonaj eksport

Kliknij Start Export. MySQL Workbench wyświetla dziennik postępu w czasie rzeczywistym pokazujący każdy obiekt podczas jego przetwarzania. W przypadku dużych baz danych może to zająć od kilku minut do kilku godzin w zależności od wolumenu danych, liczby tabel i pojemności I/O serwera.

Uważnie monitoruj dane wyjściowe dziennika. Ostrzeżenia takie jak Access denied for table lub Table doesn't exist wskazują na luki w uprawnieniach lub niespójności schematu, które spowodują niekompletną kopię zapasową. Nie traktuj ich jako kosmetycznych — niekompletna kopia zapasowa nie jest kopią zapasową.

Po zakończeniu dziennik wyświetli Export completed z sygnaturą czasową.

Krok 7: Zweryfikuj plik kopii zapasowej

Przejdź do katalogu wyjściowego i potwierdź, że plik .sql istnieje i ma rozmiar niezerowy. Następnie otwórz plik w edytorze tekstu lub wykonaj szybkie sprawdzenie integralności:

head -50 your_backup.sql
tail -20 your_backup.sql

Prawidłowy zrzut zaczyna się od bloku komentarza zawierającego wersję mysqldump i wersję serwera, po którym następują instrukcje SET dla zestawu znaków i sprawdzania kluczy obcych. Kończy się końcowym komentarzem -- Dump completed on YYYY-MM-DD HH:MM:SS. Jeśli plik jest obcięty lub kończy się nagle, eksport został przerwany i kopia zapasowa jest bezużyteczna.

Dla dodatkowej pewności wykonaj testowe przywrócenie do nieprodukcyjnej bazy danych:

mysql -u root -p test_restore_db < your_backup.sql

Następnie sprawdź liczby wierszy w odniesieniu do źródła:

SELECT COUNT(*) FROM test_restore_db.your_critical_table;

Kopia zapasowa, która nigdy nie była testowana, jest założeniem, a nie gwarancją.

Krok 8: Skompresuj i zabezpiecz plik kopii zapasowej

Surowe zrzuty .sql kompresują się wyjątkowo dobrze ze względu na ich powtarzalną strukturę tekstową. Skompresuj natychmiast po eksporcie:

gzip -9 your_backup.sql

Zazwyczaj zmniejsza to rozmiar pliku o 70–90%. W przypadku baz danych zawierających wrażliwe dane klientów zaszyfruj skompresowane archiwum przed przechowywaniem lub przesyłaniem:

openssl enc -aes-256-cbc -salt -pbkdf2 -in your_backup.sql.gz -out your_backup.sql.gz.enc -k 'your-strong-passphrase'

Przechowuj hasło oddzielnie od pliku kopii zapasowej — nigdy w tym samym katalogu lub repozytorium.

Jeśli Twoja aplikacja używa HTTPS (wymuszanego przez SSL Certificate), zastosuj tę samą dyscyplinę do transferów kopii zapasowych: nigdy nie przenoś niezaszyfrowanych zrzutów baz danych przez zwykłe HTTP lub niezaszyfrowane FTP.

Automatyzacja kopii zapasowych MySQL bez GUI MySQL Workbench

MySQL Workbench nie ma wbudowanego harmonogramu. W przypadku cyklicznych kopii zapasowych wywołuj mysqldump bezpośrednio ze skryptu powłoki i planuj za pomocą cron lub timera systemd.

Skrypt powłoki do automatycznych codziennych kopii zapasowych

#!/bin/bash

DB_USER="backup_user"
DB_PASS="your_password"
DB_NAME="your_database"
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%F_%H-%M-%S)
FILENAME="${BACKUP_DIR}/${DB_NAME}_${DATE}.sql.gz"

mkdir -p "$BACKUP_DIR"

mysqldump 
  --user="$DB_USER" 
  --password="$DB_PASS" 
  --single-transaction 
  --routines 
  --triggers 
  --events 
  --hex-blob 
  "$DB_NAME" | gzip -9 > "$FILENAME"

# Retain only the last 14 days of backups
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +14 -delete

Zaplanuj uruchamianie tego skryptu codziennie o 02:00 w nocy:

crontab -e

Dodaj następującą linię:

0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

Uwaga dotycząca bezpieczeństwa: Przechowywanie hasła w skrypcie powłoki jest dopuszczalne tylko wtedy, gdy skrypt ma uprawnienia chmod 700 i jest własnością użytkownika uruchamiającego zadanie cron. Bezpieczniejszym podejściem jest użycie pliku opcji MySQL:

# /root/.my.cnf — permissions must be 600
[client]
user=backup_user
password=your_password

Następnie usuń flagi --user i --password ze skryptu całkowicie; mysqldump będzie automatycznie odczytywać dane uwierzytelniające z .my.cnf.

Dla zespołów zarządzających wieloma bazami danych na kilku serwerach rozważ połączenie tej automatyzacji z VPS z cPanel, który zawiera wbudowany menedżer zaplanowanych kopii zapasowych obsługujący retencję, zdalne miejsca docelowe przechowywania i powiadomienia e-mail bez ręcznego tworzenia skryptów.

Przywracanie kopii zapasowej utworzonej za pomocą MySQL Workbench

Przywracanie ze zrzutu wygenerowanego przez Workbench jest proste, ale wymaga uwagi na kilka szczegółów.

Utwórz docelową bazę danych, jeśli nie istnieje:

CREATE DATABASE restored_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Przywróć z pliku zrzutu:

mysql -u root -p restored_db < your_backup.sql

Jeśli zrzut został utworzony z flagami --databases lub --all-databases (które osadzają instrukcje CREATE DATABASE i USE), nie podawaj docelowej bazy danych w wierszu poleceń — zrzut obsługuje to wewnętrznie. Eksport pojedynczej bazy danych Workbench domyślnie nie zawiera tych instrukcji, więc musisz ręcznie utworzyć i określić docelową bazę danych.

Dla skompresowanych zrzutów:

gunzip -c your_backup.sql.gz | mysql -u root -p restored_db

Monitoruj dane wyjściowe przywracania pod kątem błędów. Naruszenia ograniczeń klucza obcego podczas przywracania są zazwyczaj spowodowane kolejnością importu tabel. Jeśli tak się stanie, tymczasowo wyłącz sprawdzanie kluczy obcych:

SET FOREIGN_KEY_CHECKS = 0;
-- run restore
SET FOREIGN_KEY_CHECKS = 1;

Macierz decyzyjna: kiedy używać każdej metody tworzenia kopii zapasowych

ScenariuszZalecane narzędzie
Mała baza danych, okazjonalna ręczna kopia zapasowaMySQL Workbench Data Export
Automatyczne codzienne kopie zapasowe na Linux VPS`mysqldump` przez skrypt cron
Duża baza danych InnoDB, minimalne przestojePercona XtraBackup
Wymaganie odtwarzania do punktu w czasieDziennik binarny + pełny zrzut
Hosting zarządzany z harmonogramem GUIcPanel Backup Manager
Migracja między wersjamiLogiczny zrzut (mysqldump / Workbench)
Odtwarzanie po awarii z RPO poniżej minutyMySQL Group Replication + fizyczna kopia zapasowa

Lista kontrolna kluczowych wniosków technicznych

  • Używaj dedykowanego użytkownika kopii zapasowych z uprawnieniami SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT i PROCESS — nigdy root.
  • Zawsze włączaj --single-transaction dla tabel InnoDB, aby uniknąć blokowania i zapewnić spójną migawkę.
  • Uwzględnij flagi --routines, --triggers i --events; Workbench może domyślnie nie włączać wszystkich z nich.
  • Sprawdź, czy plik zrzutu kończy się komentarzem -- Dump completed przed uznaniem go za prawidłowy.
  • Testuj przywracanie do nieprodukcyjnej bazy danych w regularnych odstępach czasu — co najmniej raz w miesiącu.
  • Kompresuj zrzuty natychmiast za pomocą gzip i szyfruj wrażliwe archiwa za pomocą AES-256 przed transferem lub przechowywaniem poza siedzibą.
  • Usuń lub zastąp klauzule DEFINER podczas przywracania na serwer z innym zestawem użytkowników.
  • W przypadku baz danych większych niż ~10 GB oceń narzędzia do fizycznych kopii zapasowych; logiczne kopie zapasowe w tej skali wprowadzają niedopuszczalne czasy przywracania dla większości umów SLA.
  • Przechowuj kopie zapasowe na osobnym woluminie lub w zdalnej lokalizacji — kopia zapasowa na tym samym dysku co chroniona przez nią baza danych nie jest kopią zapasową.

Często zadawane pytania

Czy MySQL Workbench blokuje tabele podczas eksportu?

W przypadku tabel InnoDB z włączoną opcją --single-transaction nie są zakładane żadne blokady tabel. Eksport używa spójnej migawki odczytu. W przypadku tabel MyISAM mysqldump zakłada blokady odczytu, ponieważ MyISAM nie obsługuje spójności transakcyjnej. Jeśli baza danych miesza silniki pamięci masowej, eksport zablokuje tabele MyISAM, podczas gdy tabele InnoDB są odczytywane transakcyjnie.

Czy mogę tworzyć kopię zapasową zdalnego serwera MySQL za pomocą MySQL Workbench?

Tak. MySQL Workbench łączy się przez TCP z dowolnym osiągalnym serwerem MySQL. Skonfiguruj połączenie z adresem IP lub nazwą hosta zdalnego serwera i upewnij się, że port 3306 (lub Twój niestandardowy port) jest otwarty w zaporze sieciowej. W przypadku serwerów bez bezpośredniego dostępu publicznego Workbench natywnie obsługuje tunelowanie SSH — skonfiguruj je w zakładce SSH w oknie dialogowym połączenia.

Jaka jest różnica między „Export to Dump Project Folder” a „Export to Self-Contained File”?

Opcja folderu projektu tworzy jeden plik .sql na tabelę, co umożliwia selektywne przywracanie na poziomie tabel, ale generuje wiele plików. Opcja pliku samodzielnego zapisuje wszystko w jednym pliku .sql, który jest prostszy w zarządzaniu, kompresji i transferze. W większości przypadków użycia plik samodzielny jest właściwym wyborem.

Jak duży będzie mój plik kopii zapasowej .sql w porównaniu z rzeczywistym rozmiarem bazy danych?

Surowy zrzut .sql jest zazwyczaj 1,5 do 3 razy większy niż rzeczywisty rozmiar bazy danych na dysku, ponieważ dane wierszy są serializowane jako szczegółowe instrukcje INSERT. Po kompresji gzip zrzut zazwyczaj zmniejsza się do 10–30% oryginalnego rozmiaru bazy danych, co sprawia, że skompresowane logiczne kopie zapasowe są bardzo efektywne pod względem przechowywania dla zbiorów danych bogatych w tekst.

Czy MySQL Workbench może tworzyć kopie zapasowe widoków, procedur składowanych i wyzwalaczy?

Tak, ale tylko wtedy, gdy odpowiednie opcje są jawnie włączone. W panelu Advanced Options sprawdź, czy --routines (dla procedur składowanych i funkcji) i --events są zaznaczone. Wyzwalacze są domyślnie uwzględniane. Widoki są uwzględniane jako część eksportu schematu, gdy wybrano „Dump Structure and Data” lub „Dump Structure Only”.

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij