Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Utwórz kopię zapasową baz danych MySQL

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 szybszym mysqlhotcopy .

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.

  1. Zanim zaczniemy, zalecamy wykonanie LOCK TABLES na tabelach, których kopię zapasową chcesz utworzyć, a następnie FLUSH 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ładnia LOCK TABLES wygląda następująco:

    1
    
    LOCK TABLES tableName READ;

    Aby wykonać LOCK TABLES na order tabela customer 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 w customer baza danych (końcowy ; jest wymagane dla poleceń MySQL):

    1
    2
    3
    
    USE customer;
    LOCK TABLES order READ;
    FLUSH TABLES;
  2. 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 tabela customer 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ładzie OUTFILE 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
    
  3. 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.

  1. 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/*
    
  2. 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
    
  3. 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żytkownik mysql z grupą mysql . Aby zmienić uprawnienia do katalogu danych, wydaj następujące polecenie:

    chown -R mysql:mysql /var/lib/mysql
    
  4. 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ń nowy debian-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 (gdzie jest hasłem starego debian-sys-maint użytkownik):

    1
    
    GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION;
  5. 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.

  1. 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
    
  2. 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;
  3. 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]';
  4. W następnym przykładzie utworzymy użytkownika o nazwie customeradmin :

    1
    
    CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
  5. Teraz damy customeradmin uprawnienia dostępu do customer 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]'
  6. Na potrzeby poniższego przykładu podamy customeradmin pełny dostęp do customer Baza danych. Wydaj następujące polecenie w kliencie MySQL:

    1
    
    GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
  7. 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
    
  8. 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

  1. 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
    
  2. 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
    
  3. W poniższym przykładzie przywrócimy order tabeli do istniejącego customer baza danych z pliku kopii zapasowej SQL o nazwie customerOrderBackup.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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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;
  5. 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ócimy order tabela customer Baza danych. W order znajdują się 2 pola tabela, custNum z typem danych INT i orderName z typem danych VARCHAR(20); Twoja struktura tabeli będzie inna:

    1
    2
    
    USE customer;
    CREATE TABLE order (custNum INT, orderName VARCHAR(20));
  6. 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]';
  7. W następnym przykładzie utworzymy użytkownika o nazwie customeradmin :

    1
    
    CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
  8. Teraz damy customeradmin uprawnienia dostępu do customer 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 do customer Baza danych. Wydaj następujące polecenie w kliencie MySQL:

    1
    
    GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
  9. 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 po INFILE , szuka tego pliku w katalogu danych MySQL. Jeśli nazwa pliku customerOrderBackup.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 generates File not found errors.

  10. 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL – Uzyskaj koszt ostatniego zapytania za pomocą POKAŻ STATUS JAK „Last_Query_Cost”

  2. mysql_num_rows() oczekuje, że parametr 1 będzie zasobem, podana wartość logiczna w

  3. PHP/MySQL Wstaw wartości puste

  4. Jak mogę zrobić „wstaw, jeśli nie istnieje” w MySQL?

  5. Jaki jest błąd Każda tabela pochodna musi mieć swój własny alias w MySQL?