MySQL to system zarządzania relacyjnymi bazami danych (DBMS) typu open source, który jest często wdrażany w szerokim asortymencie kontekstów. Najczęściej jest wdrażany jako część stosu LAMP. System baz danych jest również łatwy w obsłudze i wysoce przenośny, a w kontekście wielu aplikacji jest niezwykle wydajny. Ponieważ MySQL jest często scentralizowanym magazynem danych dla dużych ilości danych o znaczeniu krytycznym, regularne tworzenie kopii zapasowych bazy danych MySQL jest jednym z najważniejszych zadań odzyskiwania po awarii, jakie może wykonać administrator systemu. Ten przewodnik dotyczy wielu różnych metod tworzenia kopii zapasowych bazy danych, a także przywracania baz danych z kopii zapasowych.
Przed rozpoczęciem procesu instalacji zakładamy, że wykonałeś kroki opisane w naszej konfiguracji i zabezpieczaniu instancji obliczeniowej. Dodatkowo będziesz musiał zainstalować bazę danych MySQL. Cała konfiguracja zostanie wykonana w sesji terminalowej; upewnij się, że jesteś zalogowany do Linode jako root przez SSH. Jeśli nie masz doświadczenia w administrowaniu serwerami Linux, możesz zainteresować się naszym wprowadzeniem do przewodnika po koncepcjach systemu Linux, przewodnikiem dla początkujących i przewodnikiem po podstawach administracji.
Metodologia tworzenia kopii zapasowych
Większość kopii zapasowych baz danych MySQL w tym przewodniku jest wykonywana przy użyciu mysqldump
narzędzie, które jest dystrybuowane z domyślną instalacją serwera MySQL. Zalecamy użycie mysqldump
zawsze, gdy jest to możliwe, ponieważ jest to często najłatwiejszy i najbardziej wydajny sposób wykonywania kopii zapasowych bazy danych. Inne metody opisane w tym przewodniku są podane w sytuacjach, gdy nie masz dostępu do mysqldump
narzędzie, jak w środowisku przywracania, takim jak Finnix lub w sytuacjach, w których lokalna instancja serwera MySQL nie zostanie uruchomiona.
Niemniej jednak ten przewodnik zawiera jedynie przegląd mysqldump
narzędzie, ponieważ istnieje wiele opcji i zastosowań mysqldump
wykraczające poza zakres tego dokumentu. Zachęcamy do zapoznania się ze wszystkimi procedurami opisanymi w tym dokumencie i kontynuowania eksploracji mysqldump
poza przypadkami tutaj opisanymi. Pamiętaj, aby zwrócić uwagę na następujące kwestie:
*.sql
pliki utworzone za pomocąmysqldump
można przywrócić w dowolnym momencie. Możesz nawet edytować bazę danych.sql
pliki ręcznie (z wielką ostrożnością!) za pomocą ulubionego edytora tekstu.- Jeśli Twoje bazy danych korzystają tylko z silnika pamięci masowej MyISAM, możesz zastąpić
mysqldump
polecenie z szybszymmysqlhotcopy
.
Tworzenie kopii zapasowych całego systemu zarządzania bazą danych (DBMS)
Często konieczne jest wykonanie kopii zapasowej (lub „zrzutu”) całego systemu zarządzania bazą danych wraz ze wszystkimi bazami danych i tabelami, w tym systemowymi bazami danych, które przechowują użytkowników, uprawnienia i hasła.
Opcja 1:Utwórz kopie zapasowe całego systemu zarządzania bazą danych za pomocą narzędzia mysqldump
Najprostsza metoda tworzenia pojedynczej spójnej kopii zapasowej całego systemu zarządzania bazą danych MySQL wykorzystuje mysqldump
narzędzie z wiersza poleceń. Składnia tworzenia zrzutu bazy danych z aktualnym znacznikiem czasu jest następująca:
mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -p
To polecenie wyświetli monit o hasło przed rozpoczęciem tworzenia kopii zapasowej bazy danych w bieżącym katalogu. Ten proces może zająć od kilku sekund do kilku godzin, w zależności od rozmiaru Twoich baz danych.
Zautomatyzuj ten proces, dodając linię do crontab
:
0 1 * * * /usr/bin/mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -pPASSWORD
W powyższym przykładzie użyj which mysqldump
aby potwierdzić poprawną ścieżkę do polecenia i zastąpić root
z użytkownikiem mysql, jako którego chcesz wykonywać kopie zapasowe, oraz PASSWORD
z poprawnym hasłem dla tego użytkownika.
Uwaga W przykładzie z crontab upewnij się, że nie ma spacji między flagą -P a wpisem hasła.
Opcja 2:Utwórz kopie zapasowe całego systemu DBMS przy użyciu kopii katalogu danych MySQL
Podczas gdy mysqldump
narzędzie jest preferowaną metodą tworzenia kopii zapasowych, istnieje kilka przypadków, które wymagają innego podejścia. mysqldump
działa tylko wtedy, gdy serwer bazy danych jest dostępny i uruchomiony. Jeśli nie można uruchomić bazy danych lub system hosta jest niedostępny, możemy bezpośrednio skopiować bazę danych MySQL. Ta metoda jest często konieczna w sytuacjach, gdy masz dostęp tylko do środowiska odzyskiwania, takiego jak Finnix, z dyskami systemowymi zamontowanymi w tym systemie plików. Jeśli próbujesz tej metody w samym systemie, upewnij się, że baza danych nie działanie. Wydaj polecenie podobne do następującego:
/etc/init.d/mysqld stop
W większości dystrybucji MySQL katalog danych znajduje się w /var/lib/mysql/
informator. Jeśli ten katalog nie istnieje, sprawdź /etc/mysql/my.cnf
plik jako ścieżkę do katalogu danych. Alternatywnie możesz przeszukać system plików w poszukiwaniu katalogu danych, wydając następujące polecenie:
find / -name mysql
Po zlokalizowaniu katalogu danych MySQL możesz go skopiować do lokalizacji kopii zapasowej. Poniższy przykład zakłada, że katalog danych MySQL znajduje się w /var/lib/mysql/
:
cp -R /var/lib/mysql/* /opt/database/backup-1266871069/
W tym przypadku rekursywnie skopiowaliśmy zawartość katalogu danych (np. /var/lib/mysql/
) do katalogu w /opt/
hierarchia (np. /opt/database/backup-1266871069/
). Ten katalog musi istnieć przed zainicjowaniem operacji kopiowania. Rozważ następującą sekwencję operacji:
/etc/init.d/mysql stop
mkdir -p /opt/database/backup-1266872202/
cp -R /var/lib/mysql/* /opt/database/backup-1266872202/
Te polecenia zaczynają się od zatrzymania demona serwera MySQL, a następnie utworzenia katalogu o nazwie /opt/database/backup-1266872202/
i wykonanie rekurencyjnej kopii katalogu danych. Zauważ, że wybraliśmy użycie backup-[time_t]
konwencja nazewnictwa dla naszych przykładów. Zastąp powyższe ścieżki preferowaną organizacją i schematem nazewnictwa. cp
polecenie nie generuje danych wyjściowych i może zająć trochę czasu, w zależności od rozmiaru bazy danych. Nie przejmuj się, jeśli ukończenie zajmie trochę czasu. Po zakończeniu operacji kopiowania możesz zarchiwizować katalog danych w archiwum „tar”, aby ułatwić zarządzanie i przenoszenie między komputerami. Wydaj następujące polecenia, aby utworzyć archiwum:
cd /opt/database/backup-1266872202
tar -czfv * > /opt/mysqlBackup-1266872202.tar.gz
Po utworzeniu tarballa możesz łatwo przenieść plik w najwygodniejszy dla siebie sposób. W razie potrzeby nie zapomnij ponownie uruchomić demona serwera MySQL:
/etc/init.d/mysql start
Tworzenie kopii zapasowych pojedynczej bazy danych
W wielu przypadkach tworzenie kopii zapasowej całego serwera bazy danych nie jest wymagane. W niektórych przypadkach, takich jak aktualizacja aplikacji internetowej, instalator może zalecić wykonanie kopii zapasowej bazy danych na wypadek, gdyby aktualizacja miała negatywny wpływ na bazę danych. Podobnie, jeśli chcesz utworzyć „zrzut” określonej bazy danych w celu przeniesienia tej bazy danych na inny serwer, możesz rozważyć następującą metodę.
Jeśli to możliwe, użyj mysqldump
narzędzie do eksportu „zrzutu” pojedynczej bazy danych. To polecenie będzie podobne do następującego:
mysqldump -u username -ps3cr1t -h localhost danceLeaders > 1266861650-danceLeaders.sql
Powyższy przykład jest podobny do przykładu z poprzedniej sekcji, z wyjątkiem użycia --all-databases
opcja, ten przykład określa konkretną nazwę bazy danych. W tym przypadku tworzymy kopię zapasową danceLeaders
Baza danych. Postać tego polecenia, w bardziej prostym zapisie, jest następująca:
mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql
Jako dodatkowy przykład utworzymy kopię zapasową bazy danych o nazwie customer
używając konta root bazy danych, wydając następujące polecenie:
mysqldump -u root -p -h localhost customer > customerBackup.sql
Zostaniesz poproszony o podanie hasła przed mysqldump
rozpoczyna proces tworzenia kopii zapasowej. Jak zawsze plik kopii zapasowej, w tym przypadku customerBackup.sql
, jest tworzony w katalogu, w którym wydano to polecenie. mysqldump
polecenie może zakończyć się w ciągu kilku sekund lub kilku godzin, w zależności od rozmiaru bazy danych i obciążenia hosta podczas wykonywania kopii zapasowej.
Tworzenie kopii zapasowych pojedynczej tabeli
Opcja 1:Utwórz kopie zapasowe pojedynczej tabeli za pomocą narzędzia mysqldump
Ta operacja, podobnie jak poprzednie zastosowania mysqldump
Narzędzie w tym dokumencie, umożliwia tworzenie kopii zapasowej pojedynczej tabeli bazy danych. Kontynuując nasze wcześniejsze przykłady, poniższy przykład umożliwia wykonanie kopii zapasowej tabeli usernameRecords
w danceLeaders
baza danych.
mysqldump -u username -ps3cr1t -h localhost danceLeaders usernameRecords \> 1266861650-danceLeaders-usernameRecords.sql
Powyższy przykład jest podobny do przykładu z poprzedniej sekcji, z tą różnicą, że do polecenia dodaliśmy specyfikację nazwy tabeli, aby określić nazwę tabeli, której kopię zapasową chcemy utworzyć. Postać tego polecenia w bardziej prostym zapisie jest następująca:
mysqldump -u [username] -p[password] -h [host] [databaseName] [tableName] > [backup-name].sql
Jako dodatkowy przykład utworzymy kopię zapasową tabeli o nazwie „zamówienie” z bazy danych o nazwie customer
używając konta root bazy danych, wydając następujące polecenie:
mysqldump -u root -p -h localhost customer order > customerBackup-order.sql
Zostaniesz poproszony o podanie hasła przed mysqldump
rozpoczyna proces tworzenia kopii zapasowej. Jak zawsze plik kopii zapasowej (w tym przypadku customerBackup.sql
) jest tworzony w katalogu, w którym wydajesz to polecenie. mysqldump
polecenie może zakończyć się w ciągu kilku sekund lub kilku godzin, w zależności od rozmiaru bazy danych i obciążenia hosta podczas wykonywania kopii zapasowej.
Opcja 2:Utwórz kopie zapasowe pojedynczej tabeli za pomocą klienta MySQL i oświadczenie OUTFILE
Sam klient MySQL ma pewne możliwości tworzenia kopii zapasowych. Jest to przydatne, gdy jesteś już zalogowany i nie chcesz opuszczać bieżącej sesji. Jeśli korzystasz z systemu na żywo i nie możesz sobie pozwolić na przestoje, powinieneś rozważyć tymczasowe zablokowanie tabeli, której kopię zapasową tworzysz.
Należy pamiętać, że podczas tworzenia kopii zapasowej pojedynczej tabeli za pomocą klienta MySQL struktura tej tabeli nie jest zachowywana w kopii zapasowej. Podczas korzystania z tej metody zapisywane są tylko same dane.
-
Zanim zaczniemy, zalecamy wykonanie
LOCK TABLES
na tabelach, których kopię zapasową chcesz utworzyć, a następnieFLUSH TABLES
aby upewnić się, że baza danych znajduje się w spójnym miejscu podczas operacji tworzenia kopii zapasowej. Potrzebujesz tylko blokady odczytu. Dzięki temu inni klienci mogą kontynuować wysyłanie zapytań do tabel podczas tworzenia kopii plików w katalogu danych MySQL. W przypadku blokady „odczyt” składniaLOCK TABLES
wygląda następująco:1
LOCK TABLES tableName READ;
Aby wykonać
LOCK TABLES
naorder
tabelacustomer
bazy danych, wydaj następującą komendę:mysql -u root -p -h localhost
Zostaniesz poproszony o hasło roota. Po wprowadzeniu poświadczeń bazy danych pojawi się monit klienta mysql. Wydaj następujące polecenie, aby zablokować
order
tabela wcustomer
baza danych (końcowy;
jest wymagane dla poleceń MySQL):1 2 3
USE customer; LOCK TABLES order READ; FLUSH TABLES;
-
Możemy teraz rozpocząć operację tworzenia kopii zapasowej. Aby utworzyć kopię zapasową pojedynczej tabeli za pomocą klienta MySQL, musisz być zalogowany do swojego MySQL DBMS. Jeśli nie jesteś aktualnie zalogowany, możesz zalogować się za pomocą następującego polecenia:
mysql -u root -p -h localhost
Zostaniesz poproszony o podanie hasła. Po wprowadzeniu prawidłowego hasła i wyświetleniu monitu klienta MySQL możesz użyć
SELECT * INTO OUTFILE
oświadczenie. Składnia tej instrukcji wygląda następująco:1
SELECT * INTO OUTFILE 'file_name' FROM tbl_name;
W tym przykładzie utworzymy kopię zapasową danych z
order
tabelacustomer
Baza danych. Wydaj następujące polecenie, aby rozpocząć procedurę tworzenia kopii zapasowej (końcowy;
jest wymagane dla poleceń MySQL):1 2 3 4 5
USE customer; LOCK TABLES order READ; FLUSH TABLES; SELECT * INTO OUTFILE 'customerOrderBackup.sql' FROM order; UNLOCK TABLES;
customerOrderBackup.sql
plik zostanie utworzony w odpowiednim podkatalogu data w katalogu danych MySQLs. Katalog danych MySQL to zwykle/var/lib/mysql/
. W tym przykładzieOUTFILE
będzie/var/lib/mysql/customer/customerOrderBackup.sql
. Lokalizacja tego katalogu i pliku może się jednak różnić w zależności od dystrybucji Linuksa. Jeśli nie możesz znaleźć pliku kopii zapasowej, możesz go wyszukać za pomocą następującego polecenia:find / -name customerOrderBackup.sql
-
Po zakończeniu operacji tworzenia kopii zapasowej będziesz chciał odblokować tabele za pomocą następującego polecenia w kliencie MySQL. To przywróci twoją bazę danych do normalnego działania. Zaloguj się do klienta MySQL za pomocą pierwszego polecenia, jeśli nie jesteś aktualnie zalogowany, a następnie wydaj drugie polecenie:
mysql -uroot -p -h localhost
1
UNLOCK TABLES;
Od tego momentu możesz normalnie korzystać z bazy danych.
Rozważania dotyczące skutecznej strategii tworzenia kopii zapasowych
Tworzenie kopii zapasowych bazy danych MySQL powinno być regularnym i zaplanowanym zadaniem. Możesz rozważyć zaplanowanie okresowych kopii zapasowych za pomocą cron
, mysqldump
i/lub mail
. Zapoznaj się z naszą dokumentacją, aby uzyskać więcej informacji na temat crona. Wdrożenie zautomatyzowanego rozwiązania do tworzenia kopii zapasowych może pomóc zminimalizować czas przestoju w sytuacji odzyskiwania po awarii.
Nie musisz logować się jako root podczas tworzenia kopii zapasowych baz danych. Użytkownik MySQL z odczytem (np. SELECT
) uprawnienie może używać zarówno mysqldump
i mysql
(np. klient MySQL) do wykonywania kopii zapasowych, jak opisano poniżej. W ramach powszechnej praktyki zalecamy, aby nie używać root
MySQL użytkownika, gdy tylko jest to możliwe, aby zminimalizować zagrożenia bezpieczeństwa.
Warto rozważyć tworzenie przyrostowych kopii zapasowych w ramach długoterminowego planu tworzenia kopii zapasowych bazy danych. Chociaż ten proces nie jest tutaj opisany, zalecamy zapoznanie się z zasobem Metody tworzenia kopii zapasowych bazy danych MySQL, aby uzyskać więcej informacji.
Przywracanie całego DBMS z kopii zapasowej
Kopia zapasowa, której nie można przywrócić, ma minimalną wartość. Zalecamy regularne testowanie kopii zapasowych, aby upewnić się, że można je przywrócić w przypadku konieczności przywrócenia z kopii zapasowych. Podczas przywracania kopii zapasowych bazy danych MySQL metoda, której użyjesz, zależy od metody użytej do utworzenia danej kopii zapasowej.
Opcja 1:Przywracanie całego DBMS przy użyciu klienta MySQL i kopii zapasowych utworzonych przez mysqldump
Przed rozpoczęciem procesu przywracania w tej sekcji założono, że w systemie działa nowo zainstalowana wersja MySQL bez żadnych istniejących baz danych ani tabel. Jeśli masz już bazy danych i tabele w swoim DBMS MySQL, przed kontynuowaniem utwórz kopię zapasową, ponieważ ten proces nadpisze bieżące dane MySQL.
Możesz łatwo przywrócić cały DBMS za pomocą mysql
Komenda. Składnia tego będzie podobna do następującej:
mysql -u [username] -p [password] < backupFile.sql
W tym przypadku po prostu przywracamy cały DBMS. Polecenie będzie wyglądać następująco:
mysql -u root -p < 1266861650-backup-all.sql
Zostaniesz poproszony o podanie hasła użytkownika root MySQL. Po podaniu prawidłowych poświadczeń rozpocznie się proces przywracania. Ponieważ ten proces przywraca cały DBMS, może to zająć od kilku sekund do wielu godzin.
Opcja 2:Przywracanie całego DBMS przy użyciu plików danych MySQL skopiowanych bezpośrednio z Katalog danych MySQL
Przed rozpoczęciem procesu przywracania w tej sekcji założono, że w systemie działa nowo zainstalowana wersja MySQL bez żadnych istniejących baz danych ani tabel. Jeśli masz już bazy danych i tabele w swoim DBMS MySQL, przed kontynuowaniem utwórz kopię zapasową, ponieważ ten proces nadpisze bieżące dane MySQL.
-
Jeśli masz pełną kopię zapasową katalogu danych MySQL (zwykle
/var/lib/mysql
), możesz go przywrócić z wiersza poleceń. Aby zapewnić pomyślne przywracanie, musisz najpierw zatrzymać demona serwera MySQL i usunąć bieżące dane z katalogu danych MySQL./etc/init.d/mysql stop rm -R /var/lib/mysql/*
-
W poniższym przykładzie kopia zapasowa katalogu danych MySQL znajduje się w
/opt/database/backup-1266872202
informator. Jeśli utworzyłeś tarball katalogu danych podczas tworzenia kopii zapasowej katalogu danych DBMS, będziesz musiał rozpakować pliki z archiwum przed kopiowaniem za pomocą następujących poleceń:cp mysqlBackup-1266872202.tar.gz /var/lib/mysql/ cd /var/lib/mysql tar xzvf mysqlBackup-1266872202.tar.gz
-
Zanim będziemy mogli ponownie uruchomić proces bazy danych MySQL, musimy upewnić się, że uprawnienia są ustawione poprawnie w
/var/lib/mysql/
informator. W tym przykładzie zakładamy, że demon serwera MySQL działa jako użytkownikmysql
z grupąmysql
. Aby zmienić uprawnienia do katalogu danych, wydaj następujące polecenie:chown -R mysql:mysql /var/lib/mysql
-
Zmień
mysql:mysql
część tego polecenia, jeśli instancja MySQL działa z różnymi uprawnieniami użytkownika i grupy. Postać tego argumentu to[user]:[group]
. Na koniec możemy uruchomić demona serwera MySQL za pomocą następującego polecenia:/etc/init.d/mysql start
Jeśli pojawi się błąd podobny do następującego:
/usr/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
Musisz znaleźć stary
debian-sys-maint
hasło użytkownika w pliku/etc/mysql/debian.cnf
a następnie zmień nowydebian-sys-maint
hasło użytkownika do niego. Możesz wyświetlić stare hasło za pomocącat
:cat /etc/mysql/debian.cnf | grep password
Skopiuj (lub zapamiętaj) hasło. Następnie musisz zmienić nowy
debian-sys-maint
hasło użytkownika. Możesz to zrobić, logując się jako użytkownik root MySQL i wydając następujące polecenie (gdziejest hasłem starego debian-sys-maint
użytkownik):1
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION;
-
Następnie musisz ponownie uruchomić MySQL za pomocą następującego polecenia:
/etc/init.d/mysql restart
Po pomyślnym uruchomieniu serwera MySQL, będziesz chciał przetestować swój DBMS MySQL i upewnić się, że wszystkie bazy danych i tabele zostały poprawnie przywrócone. Zalecamy również przeprowadzenie audytu dzienników pod kątem potencjalnych błędów. W niektórych przypadkach MySQL może się pomyślnie uruchomić pomimo błędów bazy danych.
Przywracanie pojedynczej bazy danych z kopii zapasowej
W przypadkach, w których utworzyłeś kopię zapasową tylko dla jednej bazy danych lub potrzebujesz przywrócić tylko jedną bazę danych, proces przywracania jest nieco inny.
Przed rozpoczęciem procesu przywracania w tej sekcji założono, że w systemie działa nowo zainstalowana wersja MySQL bez żadnych istniejących baz danych ani tabel. Jeśli masz już bazy danych i tabele w swoim DBMS MySQL, przed kontynuowaniem utwórz kopię zapasową, ponieważ ten proces nadpisze bieżące dane MySQL.
-
Aby przywrócić pojedynczą bazę danych za pomocą
mysql
polecenie, najpierw przygotuj docelową bazę danych. Zaloguj się do swojego (nowego) serwera bazy danych MySQL za pomocą klienta MySQL:mysql -u root -p -h localhost
-
Zostaniesz poproszony o podanie hasła użytkownika root MySQL. Po podaniu poprawnych poświadczeń należy utworzyć docelową bazę danych. W tym przypadku
customer
baza danych zostanie przywrócona:1
CREATE DATABASE customer;
-
Podobnie jak w przypadku wszystkich instrukcji MySQL, nie pomijaj ostatniego średnika (np.
;
) na zakończenie każdego polecenia. W zależności od wdrożenia może być konieczne utworzenie nowego użytkownika MySQL lub odtworzenie poprzedniego użytkownika z dostępem do nowo utworzonej bazy danych. Polecenie tworzenia nowego użytkownika MySQL ma następującą postać:1
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
-
W następnym przykładzie utworzymy użytkownika o nazwie
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Teraz damy
customeradmin
uprawnienia dostępu docustomer
Baza danych. Polecenie nadania uprawnień do bazy danych dla określonego użytkownika ma następującą postać:1
GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
-
Na potrzeby poniższego przykładu podamy
customeradmin
pełny dostęp docustomer
Baza danych. Wydaj następujące polecenie w kliencie MySQL:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
Może być konieczne określenie różnych przydziałów dostępu w zależności od wymagań wdrożenia. Zapoznaj się z oficjalną dokumentacją dotyczącą oświadczenia GRANT MySQL. Po utworzeniu docelowej bazy danych i użytkownika MySQL możesz zamknąć klienta MySQL za pomocą następującego polecenia:
quit
-
Możesz teraz używać
mysql
polecenie, aby przywrócić plik SQL. Postać tego polecenia jest podobna do następującej:mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
W poniższym przykładzie przywrócimy customer
baza danych z pliku kopii zapasowej SQL o nazwie customerBackup.sql
(zwróć szczególną uwagę na <
symbol w tym poleceniu):
mysql -u root -p -h localhost customer < customerBackup.sql
Zostaniesz poproszony o podanie hasła użytkownika root MySQL. Po podaniu prawidłowych poświadczeń rozpocznie się proces przywracania. Czas trwania tej operacji zależy od obciążenia systemu i rozmiaru przywracanej bazy danych. Może to zająć kilka sekund lub wiele godzin.
Przywracanie pojedynczej tabeli z kopii zapasowej
Opcja 1:Przywracanie pojedynczej tabeli za pomocą MySQL i kopii zapasowych utworzonych przez mysqldump
-
Przed rozpoczęciem procesu przywracania zakładamy, że Twoja instancja MySQL ma już istniejącą bazę danych, która może otrzymać tabelę, którą chcesz przywrócić. Jeśli Twoja instancja MySQL nie ma wymaganej bazy danych, musimy ją utworzyć przed kontynuowaniem. Najpierw zaloguj się do swojej instancji MySQL za pomocą następującego polecenia:
mysql -u root -p -h localhost
-
Zostaniesz poproszony o podanie hasła użytkownika root MySQL. Po podaniu poprawnych poświadczeń należy utworzyć docelową bazę danych. Na potrzeby tego przykładu utworzymy
customer
baza danych.1
CREATE DATABASE customer;
Następnie wyjdź z
mysql
monit:quit
Jeśli masz już wymaganą bazę danych, możesz bezpiecznie pominąć powyższy krok. Aby kontynuować przywracanie tabeli, wydaj polecenie w następującej formie:
mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
-
W poniższym przykładzie przywrócimy
order
tabeli do istniejącegocustomer
baza danych z pliku kopii zapasowej SQL o nazwiecustomerOrderBackup.sql
. Bądź bardzo ostrożny, używając<
operator w następującym poleceniu:mysql -u root -p -h localhost customer < customerOrderBackup.sql
Zostaniesz poproszony o podanie hasła użytkownika root MySQL. Po podaniu prawidłowych poświadczeń rozpocznie się proces przywracania. Czas trwania tej operacji zależy od obciążenia systemu i rozmiaru przywracanej tabeli. Może to zająć kilka sekund lub wiele godzin.
Opcja 2:Przywracanie pojedynczej tabeli przy użyciu klient MySQL i instrukcja INFILE dla kopii zapasowych utworzonych za pomocą OUTFILE
-
Przed rozpoczęciem procesu przywracania zakładamy, że Twoja instancja MySQL ma już istniejącą bazę danych, która może otrzymać tabelę, którą chcesz przywrócić. Jeśli Twoja instancja MySQL nie ma wymaganej bazy danych, musimy ją utworzyć przed kontynuowaniem. Najpierw zaloguj się do swojej instancji MySQL za pomocą następującego polecenia:
mysql -u root -p -h localhost
-
Zostaniesz poproszony o podanie hasła użytkownika root MySQL. Po podaniu poprawnych poświadczeń należy utworzyć docelową bazę danych. Na potrzeby tego przykładu utworzymy
customer
baza danych.1
CREATE DATABASE customer;
Następnie wyjdź z
mysql
monit:quit
-
Kopia zapasowa danych użyta w tym przypadku została utworzona przy użyciu
SELECT * INTO OUTFILE 'backupFile.sql' FROM tableName
Komenda. Ten typ kopii zapasowej zachowuje tylko same dane, dlatego należy odtworzyć strukturę tabeli. Aby przywrócić pojedynczą tabelę z poziomu klienta MySQL, musisz najpierw przygotować docelową bazę danych i tabelę. Zaloguj się do swojej (nowej) instancji MySQL za pomocą klienta MySQL:mysql -u root -p -h localhost
-
Zostaniesz poproszony o podanie hasła użytkownika root MySQL. Po podaniu poprawnych poświadczeń należy utworzyć docelową bazę danych. W takim przypadku utworzymy
customer
Baza danych. Wydaj następujące oświadczenie:1
CREATE DATABASE customer;
-
Pamiętaj, że średniki (np.
;
) po każdym oświadczeniu. Teraz musisz stworzyć tabelę docelową o prawidłowej strukturze. Typy danych pól tabeli muszą odzwierciedlać te z tabeli, z której pochodzi kopia zapasowa. W tym przykładzie przywrócimyorder
tabelacustomer
Baza danych. Worder
znajdują się 2 pola tabela,custNum
z typem danychINT
iorderName
z typem danychVARCHAR(20)
; Twoja struktura tabeli będzie inna:1 2
USE customer; CREATE TABLE order (custNum INT, orderName VARCHAR(20));
-
W zależności od wdrożenia może być konieczne utworzenie nowego użytkownika MySQL lub odtworzenie poprzedniego użytkownika z dostępem do nowo utworzonej bazy danych. Polecenie tworzenia nowego użytkownika MySQL ma następującą postać:
1
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
-
W następnym przykładzie utworzymy użytkownika o nazwie
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Teraz damy
customeradmin
uprawnienia dostępu docustomer
Baza danych. Polecenie nadania uprawnień do bazy danych dla określonego użytkownika ma następującą postać:1
GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
Na potrzeby poniższego przykładu podamy
customeradmin
pełny dostęp docustomer
Baza danych. Wydaj następujące polecenie w kliencie MySQL:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
Może być konieczne określenie różnych przydziałów dostępu w zależności od wymagań wdrożenia. Zapoznaj się z oficjalną dokumentacją dotyczącą oświadczenia GRANT MySQL. Po utworzeniu tabeli i użytkownika możemy zaimportować dane kopii zapasowej z pliku kopii zapasowej za pomocą
LOAD DATA
Komenda. Składnia jest podobna do następującej:1
LOAD DATA INFILE '[filename]' INTO TABLE [tableName];
W poniższym przykładzie przywrócimy dane z tabeli z pliku o nazwie
customerOrderBackup.sql
. Gdy klient MySQL otrzymuje ścieżkę i nazwę pliku poINFILE
, szuka tego pliku w katalogu danych MySQL. Jeśli nazwa plikucustomerOrderBackup.sql
podano, ścieżka będzie wyglądała następująco:/var/lib/mysql/customerOrderBackup.sql
. Ensure that the file you are trying to restore from exists, especially if MySQL generatesFile not found
errors. -
To import the data from the
customerOrderBackup.sql
file located in/var/lib/mysql/
, issue the following command:1
LOAD DATA INFILE 'customerOrderBackup.sql' INTO TABLE order;
This process can take anywhere from a few seconds to many hours depending on the size of your table. The duration of this operation depends on your system’s load and the size of the table that you are restoring. It may complete in a few seconds, or it may take many hours. After you have verified that your data was imported successfully, you can log out:
quit
Więcej informacji
Dodatkowe informacje na ten temat można znaleźć w poniższych zasobach. Chociaż są one dostarczane w nadziei, że będą przydatne, należy pamiętać, że nie możemy ręczyć za dokładność ani aktualność materiałów hostowanych zewnętrznie.
- The Official MySQL Web Site
- MySQL Database Backup Methods page
- mysqldump Manual Page
- Schedule Tasks With Cron
- MySQL’s Grant Statement, Official Documentation