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

Jak wykonać kopię zapasową baz danych MySQL z wiersza poleceń w systemie Linux

Obecna ewolucja technologiczna każdego aspektu życia sprawiła, że ​​dane są cenniejsze niż złoto i srebro. Jeśli potrafisz pozyskiwać, rozwijać i chronić dane, jesteś o krok od bycia bogiem danych. Jednak duże firmy, które kontrolują takie aspekty życia, jak handel elektroniczny, paliwa, transport i żywność, polegają na ochronie danych, aby uchronić się przed nieuniknionym upadkiem.

W tej chwili utrata danych jest jak utrata ubezpieczenia na życie. Dlatego używany system zarządzania bazą danych powinien mieć orientację na kopie zapasowe. Jeśli jesteś administratorem MySQL lub użytkownikiem zajmującym się rosnącą ilością danych, powinieneś rozważyć wdrożenie częstszego planu automatyzacji tworzenia kopii zapasowych. Powód? Możesz stać się ofiarą włamania do danych lub nawet przypadkowo zmienić swoje dane.

Takie okoliczności mogą prowadzić do bezlitosnych naruszeń danych, zwłaszcza gdy nie masz planu tworzenia kopii zapasowych bazy danych. Jeśli jesteś zainwestowanym użytkownikiem lub administratorem MySQL, ten artykuł jest tutaj, aby rozwiązać problemy z tworzeniem kopii zapasowych bazy danych. Osiągniemy dwa cele. Po pierwsze, zrozumiesz implementację eksportowania baz danych poprzez „mysqldump”. Następnie na koniec dowiemy się, w jaki sposób użycie „crontab” może ułatwić cały proces dzięki automatyzacji.

Przygotuj katalog kopii zapasowych danych

Ponieważ system Linux nie zaleca użytkownikowi miejsca docelowego kopii zapasowej danych MySQL, wybór odpowiedniej lokalizacji kopii zapasowej należy do Ciebie. Na przykład w tym przewodniku samouczka będziemy pracować w katalogu kopii zapasowych w „/var/www_my_backups/”. Rozważamy to podejście tylko w celu zrozumienia mechanizmów tworzenia kopii zapasowych danych MySQL. W idealnej sytuacji zaleca się, aby wszystkie ważne kopie zapasowe danych odbywały się na serwerze offside.

Możesz utworzyć preferowany katalog kopii zapasowych na komputerze lokalnym za pomocą polecenia terminala podobnego do następującego:

$ sudo mkdir /var/www_my_backups/

Upewnij się, że używana maszyna do tworzenia kopii zapasowych w systemie Linux ma uprawnienia administratora lub sudo. Jeśli nie masz dostępu właściciela do utworzonego katalogu kopii zapasowej, napotkasz błędy uprawnień podczas uruchamiania testów mysqldump. Następujące polecenie powinno zawierać listę aktualnie aktywnego użytkownika systemu i szczegółowe informacje, jeśli masz uprawnienia własności do utworzonego folderu kopii zapasowej.

$ sudo chown $(whoami):$(whoami) /var/www_my_backups/

Narzędzie klienta mysqldump

To narzędzie MySQL wykonuje logiczne kopie zapasowe. Powoduje to powstanie kilku zestawów instrukcji SQL, które po wykonaniu odtwarzają oryginalne dane tabeli bazy danych i definicje obiektów. Ponadto jeden lub kilka zrzutów bazy danych MySQL jest tworzonych kopii zapasowych lub przenoszonych na dodatkowy serwer bazy danych SQL.

Standardowe polecenie mysqldump jest reprezentowane przez następującą składnię polecenia.

$ mysqldump -u [mysql_username] -p[mysql_password] [mysql_database_name]> /ścieżka/do/[mysql_dump_file_name].sql
  • -u [mysql_username]: reprezentuje uprzywilejowanego użytkownika bazy danych MySQL. Ten użytkownik powinien mieć możliwość wykonywania operacji zrzutu bazy danych.
  • -p[mysql_password]: reprezentuje hasło użytkownika bazy danych MySQL. Nie dodawaj spacji między „-p” i „[mysql_password]”.
  • [mysql_dump_file_name]: reprezentuje nazwę Twojej bazy danych MySQL.
  • >: wskazuje miejsce docelowe zrzutu danych wyjściowych
  • /ścieżka/do/[nazwa_pliku_zrzutu_mysql].sql: wskazuje lokalizację ścieżki skojarzonego pliku zrzutu. Możesz nadać temu plikowi zrzutu [mysql_dump_file_name] niestandardową nazwę, jeśli chcesz.

Zanim przejdziemy do tego poradnika, warto wspomnieć o „-p[mysql_password]”. Chociaż w tym przewodniku po artykule skupimy się na powiązaniu jego użycia z kilkoma przykładami zrzutów MySQL, należy unikać używania go bezpośrednio podczas obsługi prawdziwych zrzutów kopii zapasowych MySQL, zwłaszcza w sieci współdzielonej.

Działający zrzut można przejąć za pomocą dwuwymiarowego polecenia, takiego jak „ps ax”, które ujawnia powiązaną nazwę użytkownika i hasło do bazy danych. Jednak użycie lokalizacji „~/.my.cnf” do przechowywania hasła bazy danych MySQL sprawia, że ​​użycie „-p [mysql_password]” w podanym poleceniu dump jest niepotrzebne. Jeśli to polecenie zrzutu jest wykonywane przez zadanie cron, opcja polecenia „–defaults-extra-file=/ścieżka/do/.my.cnf” powinna wskazywać poleceniu mysqldump lokalizację hasła bazy danych.

Kilka przykładów kopii zapasowych bazy danych MySQL

Rozważmy kilka scenariuszy użytkownika, w których możemy użyć polecenia mysqldump do tworzenia kopii zapasowych danych bazy danych MySQL.

Tworzenie kopii zapasowych wszystkich baz danych

Użycie opcji polecenia „–all-databases” w poleceniu mysqldump zajmie się wszystkimi zrzutami bazy danych MySQL w systemie Linux. Na przykład poniższe polecenie pokazuje, jak zrzucić wszystkie bazy danych MySQL do już istniejącego pliku „/var/www_my_backups/”. Użytkownik tego systemu Linux powinien być rootem lub mieć uprawnienia sudo.

W naszym przypadku i dla Twojego zrozumienia, nazwaliśmy nasz plik zrzutu „all-databases.sql”, ale możesz użyć dowolnej innej nazwy według własnych preferencji. Ponieważ mamy do czynienia ze wszystkimi bazami danych, bycie rootem konta MySQL jest konieczne.

$ mysqldump -u root -p[mysql_password] --all-databases> /var/www_my_backups/all-databases.sql

Tworzenie kopii zapasowej jednej bazy danych

Jeśli ważna jest tylko jedna baza danych MySQL, utworzenie jej kopii zapasowej za pomocą polecenia mysqldump wymaga zastąpienia opcji polecenia „[mysql_database]” rzeczywistą nazwą. Nazwa pliku zrzutu może przyjąć nazwę tej bazy danych „[mysql_database].sql”, dzięki czemu można ją łatwo prześledzić i przywrócić później. Możesz także wybrać inną niestandardową nazwę pliku zrzutu, jeśli chcesz.

To przykładowe polecenie jest zaimplementowane przy użyciu użytkownika root, ale każdy inny użytkownik z dostępem do docelowej bazy danych jest realną opcją.

$ mysqldump -u root -p[mysql_password] [mysql_database_name]> /var/www_my_backups/[mysql_database_name].sql

Tworzenie kopii zapasowych wielu baz danych

Być może masz określony wybór baz danych MySQL, które chcesz wykonać. W takim przypadku opcja polecenia „[mysql_database_name]” pojawi się więcej niż jeden raz, a każdy przypadek jest powiązany z nazwą bazy danych, którą chcesz wykonać kopię zapasową. Pamiętaj, aby umieścić nazwy tych baz danych w poleceniu mysqldump. Plik zrzutu „[mysql_database_name].sql” powinien być również powiązany z unikalną nazwą, którą zapamiętasz.

$ mysqldump -u root -p[mysql_password] [mysql_database_1_name] [mysql_database_2_name]> /var/www_my_backups/[mysql_databases_1_2_names].sql

Tworzenie kopii zapasowej pojedynczej tabeli

Jeśli procedura tworzenia kopii zapasowej dotyczy tylko określonej tabeli bazy danych, tworzenie jej kopii zapasowej powinno zawierać zarówno nazwę bazy danych, jak i nazwę tabeli bazy danych jako opcje polecenia mysqldump. Możesz nadać plikowi zrzutu taką samą nazwę jak docelowa tabela bazy danych, np. [mysql_database_table_name].sql.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_name]> /var/www_my_backups/[mysql_databases_table_name].sql

Tworzenie kopii zapasowych wielu tabel

Gdy chcesz wykonać kopię zapasową wielu określonych tabel bazy danych MySQL, po nazwie bazy danych, w której znajdują się te tabele, powinna pojawić się wzmianka o wszystkich wybranych nazwach tabel bazy danych. Docelowy plik zrzutu może mieć nazwę taką jak [mysql_database_tables_1_2_names].sql

$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_1_name] [mysql_database_table_2_name]> /var/www_my_backups/[mysql_databases_tables_1_2_names>].sql
Tworzenie kopii zapasowych zdalnych baz danych

Ta przykładowa implementacja jest również prosta. Polecenie zrzutu bazy danych MySQL będzie musiało zawierać opcję polecenia „-h”, po której następuje nazwa hosta komputera zdalnego lub powiązany adres IP. Wszystkie inne zwykłe składnie poleceń tworzenia kopii zapasowej bazy danych powinny być następnie przestrzegane.

$ mysqldump -h [zdalny_ip_komputera lub_nazwa_hosta] -u root -p[mysql_password] [mysql_database_name]> /var/www_my_backups/[zdalny_mysql_database_name].sql

Możesz dostosować to polecenie mysqldump, aby poradzić sobie z innymi omówionymi już przypadkami tworzenia kopii zapasowych baz danych, np. kopiami zapasowymi MySQL z wieloma bazami danych lub tabelami.

Tworzenie kopii zapasowej bazy danych związanej z kompresjami

Jeśli chcesz powiązać kopie zapasowe danych z kompresją, „| gzip -c>” opcja polecenia mysqldump może być użyta do potoku wyjścia gzip.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c> /var/www_my_backups/[nazwa_bazy_danych_sql].sql.gz

Jeśli Twoja baza danych MySQL jest ogromna i chcesz śledzić postęp kompresji, zawsze rozważ zaimplementowanie opcji pełnej informacji, jak pokazano w poniższym przykładzie.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c --verbose> /var/www_my_backups/[mysql_database_name].sql.gz

Przywracanie bazy danych MySQL

Po zakończeniu tworzenia kopii zapasowej bazy danych MySQL, co dalej? Jak uzyskujesz dostęp do danych, które tak starannie zabezpieczyłeś? Przywracanie danych wymaga przestrzegania następującej składni przywracania MySQL.

$ mysql -u [mysql_username] -p[mysql_password] [mysql_database_name]  

Jak być może nie zauważyłeś, jedyną różnicą między tym poleceniem przywracania bazy danych a poleceniem tworzenia kopii zapasowej bazy danych jest to, że używamy opcji „mysql” zamiast opcji „mysqldump” i opcji „<” zamiast opcji „>”.

Automatyzacja kopii zapasowych MySQL

System operacyjny Linux jest wyposażony w kilka przydatnych usług, które są bezcenne dla administratora baz danych, jak ta pod MySQL RDBMS. Jedną z tych usług jest usługa cron. Jest skuteczny w planowaniu automatycznych poleceń. Te polecenia, po utworzeniu, są przydzielane do tabeli crontab crontab. Możesz uzyskać dostęp do crontab za pomocą następującego polecenia.

$ sudo crontab -e

Jeśli zostaniesz o to poproszony, to polecenie może chcieć powiązać jego wykonanie z edytorem tekstu, aby wybrać edytor tekstu nano.

Otworzy się plik o nazwie „/tmp/crontab.LVY6A9/crontab”. Na dole tego pliku crontab wprowadź realny harmonogram crona wraz z odpowiednią komendą zrzutu MySQL. Poniższy przykład implementuje użycie kompresji gzip do codziennych kopii zapasowych bazy danych. Czasami możesz mieć zaplanowane duże pliki .sql do utworzenia kopii zapasowej. Użycie gzip zmniejsza takie pliki do rozsądnych rozmiarów przed przechowywaniem kopii zapasowej. Pomaga w zarządzaniu pamięcią zapasową.

00 03 * * * mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c> /var/www_my_backups/[nazwa_bazy_danych_sql].sql.gz

Opcję komendy „00 03 ***” można interpretować w następujący sposób. Co 24 godziny po godzinie 3 nad ranem wykonywane jest następujące po nim polecenie mysqldump w celu utworzenia kopii zapasowej bazy danych. Plik kopii zapasowej bazy danych, który istniał przed rozpoczęciem procesu tworzenia kopii zapasowej, zostanie nadpisany. W Twoim przypadku nie musisz czekać po 24 godzinach, aby zobaczyć działanie automatyzacji tworzenia kopii zapasowych bazy danych za pośrednictwem crontab.

Możesz edytować opcję „00 03 ***” w pliku crontab na coś w rodzaju „02 00 ***”, a za dwie minuty proces tworzenia kopii zapasowej powinien się samoczynnie zainicjować. Alternatywnie, jeśli twoja godzina to 22:30, edycja pliku z „34 22 ***” zainicjuje proces tworzenia kopii zapasowej bazy danych o 22:34. Pamiętaj, aby zapisać (Ctrl+X) ten plik crontab przed jego zamknięciem, aby to polecenie stało się wykonywalne.

Po upływie ustawionych minut zadanie cron powinno zostać wykonane. Następnie wypisz utworzony folder kopii zapasowej na swoim terminalu, a utworzony plik kopii zapasowej .sql.gz powinien być obecny.

$ ls -l /var/www_my_backups/

Wynikowy wynik powinien być podobny do następującego:

-rw-r--r-- 1 root root 36M Lip 29 22:24 [mysql_database_name].sql.gz

Jeśli masz problemy z wykryciem pliku kopii zapasowej .sql.gz MySQL, sprawdź swój czas crontab lub całe polecenie. Mógł wystąpić błąd składni lub czegoś może brakować. Alternatywnie, systemowy dziennik crona może wskazywać, gdzie występuje problem.

$ sudo grep CRON /var/log/syslog

Pamiętaj, aby zresetować wpis crontab do preferowanego harmonogramu bazy danych po potwierdzeniu, że wszystko działa poprawnie.

Używanie my.cnf do przechowywania haseł bazy danych MySQL  

Wspomnieliśmy już o wadach opcji „-p[mysql_password]” w poleceniu mysqldump, szczególnie w sieci współdzielonej. Musimy przedyskutować, jak zaimplementować przechowywanie haseł w pliku „~/.my.cnf”. Użytkownicy korzystający z crona do automatyzacji tworzenia kopii zapasowych baz danych będą musieli zrozumieć implementację opcji polecenia „–defaults-extra-file=/path/to/.my.cnf”.

Edycja pliku my.cnf

Katalog domowy twojego systemu Linux zawiera ten ukryty plik. Bezpośrednia ścieżka systemowa do niego to „/home/twoja_nazwa_użytkownika/.my.cnf”. Użyj edytora tekstu nano, aby otworzyć ten plik. Opcja „~” wskazuje na katalog domowy.

$ sudo nano ~/.my.cnf

Edytuj ten otwarty plik zgodnie z następującą składnią, aby pomyślnie przechowywać hasło do bazy danych MySQL. Część „TWOJA_DO_DB_PASS” to jedyny wpis, który musisz zmienić za pomocą aktualnego hasła do bazy danych. Wprowadź te informacje na dole pliku i zapisz je.

[mysqldump] 
hasło=TWOJE_HASŁO_BAZY_DANYCH

Użyj Ctrl+X, aby zapisać ten plik. Ten plik „my.cnf” również wymaga pewnych ustawień uprawnień. Zaimplementuj następujące polecenie:

$ sudo chmod 600 ~/.my.cnf

Nadszedł czas, aby zobaczyć odtworzenie naszego nowego polecenia mysqldump z wyeliminowaną opcją polecenia „-p[mysql_password]”.

$ mysqldump -u root [mysql_database_name] | gzip -c> /var/www_my_backups/[nazwa_bazy_danych_sql].sql.gz 

Jak widać, nie dodaliśmy niczego. Wygląda na to, że jedyną rzeczą, którą usunęliśmy, jest opcja polecenia „-p [mysql_password]”.

Crontab i –defaults-extrs-file

Użytkownicy preferujący automatyzację tworzenia kopii zapasowych baz danych powinni pobrać hasło do bazy danych z pliku „~/.my.cnf” za pomocą opcji polecenia „–defaults-extra-file”. Takie podejście ułatwia działanie polecenia mysqldump, gdy musi odwoływać się do autentyczności użytkownika bazy danych i hasła. Musisz dokładnie określić ścieżkę do pliku my.cnf, a nie tylko użyć symbolu „~”. Rozważ następującą implementację w pliku crontab:

30 22 * ​​* *   mysqldump --defaults-extra-file=/home/system_username/.my.cnf -u root [mysql_database_name] | gzip -c> /var/www_my_backups/[nazwa_bazy_danych_sql].sql.gz 

W tym przykładzie crontab jest wykonywany codziennie o godzinie 22:30, aby utworzyć kopię zapasową kompresji gzip bazy danych MySQL.

Uwaga końcowa

W tym artykule przyjrzano się mechanizmom tworzenia kopii zapasowych lokalnych baz danych w katalogu kopii zapasowych „/var/www_my_backups”. Ponieważ teraz rozumiesz, jak przebiega proces tworzenia kopii zapasowej, powinieneś skalować się wyżej i zacząć myśleć o kopiach zapasowych poza siedzibą firmy. Jednak bardziej praktycznym podejściem jest konfiguracja dostępu SFTP, która wskazuje na ten katalog kopii zapasowej „/var/www_my_backups”.

Przy takiej konfiguracji możliwe jest utworzenie zadania cron SFTP za pośrednictwem zdalnego serwera w celu pobrania kopii tych lokalnie przechowywanych plików bazy danych do przechowywania ubezpieczenia w nocy i codziennie.

Podsumowując ten niesamowity przewodnik po artykułach, jesteś teraz dumnym mistrzem scenariuszy tworzenia kopii zapasowych baz danych MySQL, przywracania kopii zapasowych baz danych i automatyzacji tworzenia kopii zapasowych baz danych. Powinieneś teraz skoczyć w wiarę i mieć pewność, że użyjesz zadań cron do planowania i obsługi automatyzacji tworzenia kopii zapasowych bazy danych MySQL. Harmonogramy automatyzacji nie muszą być dzienne, ponieważ mogą być również tygodniowe i miesięczne.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instrukcja VALUES w MySQL

  2. Jak zmienić rozmiar kolumny w MySQL?

  3. Jak przeszukiwać kolumnę JSON w MySQL

  4. Długość indeksu varchar MySQL

  5. Jak wybrać n-ty wiersz w tabeli bazy danych SQL?