Czy powinienem używać mysqldump lub mysqlhotcopy do tworzenia kopii zapasowych bazy danych MySQL?

14

Mam blog WordPress działający w bazie danych MySQL, dla którego chcę regularnie wykonywać kopie zapasowe. Czy lepiej byłoby użyć programu mysqldump lub skryptu mysqlhotcopy do tworzenia kopii zapasowych? Jakie są zalety i wady każdego z nich? Czy są jakieś inne opcje, które powinienem rozważyć?

Matthew Shanley
źródło

Odpowiedzi:

5

Mogę powiedzieć, że obecnie używam mysqldump do przechowywania kopii zapasowej mojej bazy danych. Robię to, ponieważ moim celem jest przechowywanie cotygodniowych kopii zapasowych, aby w przypadku, gdy ktoś usunie ich strony internetowe, mogę je odzyskać co najwyżej tydzień temu.

Zaletą tego jest to, że jest to podstawowy plik tekstowy, dzięki czemu mogę go zaimportować na dowolny komputer z MySQL, załadować i wyszukać brakujące dane. Uwaga: aby uzyskać to, czego chciałem, polecenie, którego używam w skrypcie, to:

mysqldump --databases databaseName > /file/path

--databasesJest to, co sprawia, że mysqldump zrzucić CREATE DATABASE IF NOT EXISTnagłówków tak, że można importować go gdziekolwiek chcę.

Chociaż ta metoda działa dla mnie, jestem pewien, że istnieją lepsze metody do innych celów. Mogę również powiedzieć, że tak jak w przypadku każdego rozwiązania do tworzenia kopii zapasowych, powinieneś przechowywać go przynajmniej na innym komputerze, a najlepiej poza firmą (nasz w chmurze), jeśli możesz.

Mikrofon
źródło
5

Zastanowiłbym się nad użyciem wtyczki WordPress o nazwie „Kopia zapasowa bazy danych WordPress (WP-DB-Backup)”, która jest również wymieniona w przewodniku tworzenia kopii zapasowych bazy danych Wordpress . Ta wtyczka może tworzyć kopie zapasowe bazy danych zgodnie z harmonogramem i przesyłać ją pocztą e-mail (zakładając, że jest to mała baza danych). Możesz także wykonać kopię zapasową lokalnie. Możesz wykluczyć spam w komentarzach i poprawki, aby zmniejszyć bazę danych

Mniej kontroli, ale łatwiejsze do wdrożenia.

Zrzuty MySQL dają największą kontrolę . Twoja usługa hostingowa może być również czynnikiem ograniczającym. Niektóre hosty nie dają ci dostępu do uruchamiania zadań cron lub uruchamiania polecenia mysqldump.

citadelgrad
źródło
4

SUGESTIA # 1

Jeśli wykonujesz kopie zapasowe wystąpienia MySQL, najlepiej jest skonfigurować MySQL Replicaton, aby jakiekolwiek obciążenie serwera lub zwiększenie ilości operacji we / wy dysku nie wpłynęło na produkcyjną bazę danych w jakikolwiek sposób.

Po skonfigurowaniu replikacji MySQL możesz napisać skrypt mysqldump na różne sposoby ( zobacz mój post na DBA StackExchange dla różnych technik ), pod warunkiem, że uruchamiasz te mysqldumps na Slave.

SUGESTIA # 2

Jeśli nie możesz skonfigurować innego serwera do replikacji MySQL, a wszystkie twoje dane to InnoDB, będziesz musiał wykonać mysqldump w określonym momencie. Odbywa się to za pomocą--single-transaction opcji z mysqldump. Dlatego jeśli uruchomiono mysqldump od północy, a tworzenie kopii zapasowej zakończyło się o 00:15, dane wyjściowe mysqldump po przywróceniu odzwierciedlają dane od godziny 12:00.

SUGESTIA # 3

Innym programem dostępnym dla kopii zapasowych MySQL jest XtraBackup od Percona.

XtraBackup to kompleksowe narzędzie, które zachowuje się jak rsync, ale ma cel w życiu. Można rozpocząć kopiowanie wszystkich danych i obszarów tabel InnoDB. Ma możliwość wewnętrznego tworzenia punktów kontrolnych i wykonywania odzyskiwania po awarii w miejscu InnoDB, aby uzyskać idealną kopię zapasową w czasie. XtraBackup posiada również dodatkową funkcję, która pozwala na tworzenie przyrostowych kopii zapasowych. Kolejną dodatkową funkcją jest tworzenie plików dziennika InnoDB, również zbudowanych przez lokalne odzyskiwanie po awarii. Istnieje również oprogramowanie do owijania, które umożliwia również zamrożone kopiowanie tabel MyISAM.

Wykonuje kopię zapasową instancji MySQL, ale z wyraźną różnicą. Moment wykonania kopii zapasowej zależy od tego, kiedy kopia zapasowa została ukończona, a nie od momentu jej uruchomienia. Zatem jeśli uruchomiłeś XtraBackup od północy, a tworzenie kopii zapasowej zakończyło się o 00:15, dane wyjściowe mysqldump po przywróceniu odzwierciedlają dane od godziny 12:15.

RolandoMySQLDBA
źródło
2

Zależy od silnika pamięci masowej dla twoich tabel. Działa tylko w przypadku tabel ARCHIWUM i MyISAM zgodnych z niniejszą stroną podręcznika MySQL i musi być uruchamiany na tym samym komputerze (tj. Nie używając lokalnego gniazda ani TCP / IP)

MySQL mówi również

Jeśli wykonujesz kopię zapasową na serwerze, a wszystkie tabele są tabelami MyISAM, rozważ użycie mysqlhotcopy zamiast tego, ponieważ może ona wykonywać szybsze kopie zapasowe i szybciej przywracać.

Aiden Bell
źródło
1

Polecam użycie jednego z wielu wcześniej istniejących skryptów do tworzenia kopii zapasowych mySQL, aby wyeliminować problem z jego prawidłowym działaniem.

Używam „automysqlbackup”, który jest skryptem powłoki typu open source, który można ustawić jako zadanie cron na serwerze. Obejmuje prawie każdą możliwą sytuację tworzenia kopii zapasowych: http://sourceforge.net/projects/automysqlbackup/ . Działa dla mnie bezbłędnie od kilku lat - całkowicie zalecane.

Mark Hatton
źródło
1

mysqlhotcopy to skrypt Perla około '05. Dodaje więc zależności dla Perla i różnych Perli. Przekazałbym ten.

mysqldump to program C dystrybuowany z MySQL i aktywnie utrzymywany. Jeśli dodasz opcję -x, spowoduje to zablokowanie tabel, dzięki czemu będziesz złoty.

Ja osobiście mam ten skrypt w cronie (będziesz chciał usunąć te `ucieczki, jeśli chcesz uruchomić go ręcznie) i działa dla mnie jak urok, tworząc kopię zapasową każdej z moich baz danych w pliku lokalnym, a także pełny zrzut wszystkich baz danych.

A jeśli masz tam więcej niż jedną bazę danych, będziesz chciał zrzucić dla nich granty. Maatkit ci w tym pomoże, a Ty po prostu zróbmk-show-grants -uroot -pPASSWORD > mygrantsdatabase.sql kopię zapasową tabel grantów i przygotuj je ponownie do zaimportowania.

intlect
źródło
0

Wiem również, że wiele narzędzi do zarządzania serwerami, takich jak Interworx i Ensim, używa mysqldump do tworzenia kopii zapasowych baz danych, a następnie prostej komendy mysql do przywracania. Z tego sądzę, że jest to jeden z najlepszych sposobów.

Darryl Hein
źródło