Właśnie usłyszałem o mysqlpump - wygląda na to, że został wydany z MySQL 5.7, jednak MySQL 5.7 nadal zawiera mysqldump . Oba są programami do tworzenia kopii zapasowych, ale czy ktoś mógłby podsumować główne różnice? Czy istnieją scenariusze, w których jeden z nich mógłby działać lepiej? Czy mysqldump zostanie wycofany dla mysqlpump?
17
Odpowiedzi:
Ponieważ sam badałem to, oto podsumowanie tego, co znalazłem.
Zgodnie z postem na blogu MySQL z 2015 roku , głównymi zaletami mysqlpump jest to, że może on używać wielu wątków równolegle w celu przyspieszenia zrzutu i że nie spełnia wymagań kompatybilności wstecznej mysqldump, co powinno otworzyć drzwi do dalszych działań ulepszenia.
Jednak post ostrzega, że mysqlpump jest „obecnie niebezpieczny jako zastępcza kopia zapasowa ogólnego przeznaczenia”, ponieważ poszczególne wątki mogą generować swoje sekcje zrzutu z różnych stanów bazy danych. Nie wspomina o żadnych planach wycofania mysqldump.
Giuseppe Maxia bawił się z mysqlpump w 2015 roku i stwierdził, że przyspieszenie zrzutu jest dość małe. Docenił nową możliwość precyzyjnego wybierania obiektów, które mają zostać zrzucone, ale zauważył, że ponowne załadowanie zrzutu może być wykonane tylko jednowątkowe i że (w przeciwieństwie do mysqldump) zrzuty można załadować tylko z powrotem do baz danych o tej samej nazwie.
źródło
mysqlpump
jest to zamknięte oprogramowanie (niepewna przyszłość). Alternatywą dla Open Sourcemysqlpump
jest github.com/maxbube/mydumpermydumper
Przyglądałem się również różnicom między tymi dwoma narzędziami, a oprócz tego, co wspomniano w odpowiedzi @ Neila , wydaje się, że mysqlpump ma również mniej opcji niż mysqldump , na przykład nie zezwalając na:
--compatible=
--tab
oraz powiązane z nim opcje:--fields-terminated-by=
--fields-enclosed-by=
--fields-optionally-enclosed-by=
--fields-escaped-by=
--lines-terminated-by=
--quote-names
--add-drop-trigger
--allow-keywords
--apply-slave-statements
--comments
--compact
--compatible
--create-options
--delete-master-logs
--disable-keys
--dump-date
--dump-slave
--enable-cleartext-plugin
--flush-logs
--flush-privileges
--force
--ignore-error
--include-master-host-port
--lock-all-tables
--lock-tables
--master-data
--no-autocommit
--no-tablespaces
--opt
--order-by-primary
--pipe
--quick
--quote-names
--set-gtid-purged
--shared-memory-base-name
--skip-add-drop-table
--skip-add-locks
--skip-comments
--skip-compact
--skip-disable-keys
--skip-extended-insert
--skip-opt
--skip-quick
--skip-quote-names
--skip-triggers
--skip-tz-utc
--verbose
--where
--xml
Z drugiej strony, mysqlpump ma następujące opcje, które nie są dostępne w mysqldump
--compress-output
--default-parallelism
--defer-table-indexes
--exclude-databases=
--exclude-events=
--exclude-routines=
--exclude-triggers=
--exclude-users=
--include-events=
--include-routines=
--include-triggers=
--include-users=
--parallel-schemas=
--skip-definer
--users
--watch-progress
Zmiana nazwy lub podobna:
--no-data
in dump ==--skip-dump-rows
in pump--no-set-names
in dump nie istnieje w pompie , ale jego synonim ---skip-set-charset
- istnieje w obu--ignore-table=
w zrzutu jest głównie--exclude-tables=
w pompie, z wyjątkiem--exclude-tables
tego, że można określić wszystkie tabele, oddzielając je przecinkami, i pozwala na stosowanie symboli wieloznacznych (%
i_
)--tables
w zrzutu jest głównie--include-tables=
w pompie, z wyjątkiem--include-tables
tego, że można określić wszystkie tabele, oddzielone przecinkami, i pozwala na stosowanie symboli wieloznacznych (%
i_
). Ponadto,--tables
zastępuje--databases
w wysypisko , natomiast--include-tables=
w pompy nie.--databases
zarówno w zrzut, jak i pompa jest głównie--include-databases=
w pompie, z wyjątkiem--include-databases
tego, że można określić wszystkie bazy danych, oddzielając je przecinkami, i zezwala na znaki wieloznaczne (%
i_
).źródło
Oto podsumowanie tego, co zrozumiałem między oboma narzędziami do tworzenia kopii zapasowych.
Definicja mysqldump podana na stronie podręcznika
Mysqldump jest bardzo łatwy w użyciu, a także bardzo prosta składnia. Kiedy to wykonamy, konwertuje wszystkie wiersze na zapytania SQL i drukuje je na standardowym wyjściu. Możemy przekierować to wyjście do pliku wyjściowego (>) lub używając opcji - plik wyników.
Domyślnie mysqldump nie zrzuca tabel schematu_informacji i nigdy nie przyjmuje schematu wydajności. Główną wadą mysqldump jest to, że używa tylko jednego wątku podczas tworzenia kopii zapasowej i przywracania.
Mysqlpump to kolejne narzędzie, które zostało wprowadzone w MySQL 5.7 z kilkoma dodatkowymi funkcjami w porównaniu z mysqldump
Definicja mysqlpump podana na stronie podręcznika
Główne cechy to
Przetwarzanie równoległe (wielowątkowe) w celu przyspieszenia tworzenia kopii zapasowej
Wskaźnik postępu
Zrzucanie kont użytkowników jako (tworzenie, przyznawanie instrukcji nie jako wstawek do bazy danych systemu MySQL)
Domyślnie mysqlpump nie wykonuje kopii zapasowych systemowych baz danych, takich jak schemat informacyjny, schemat wydajności i niektóre tabele systemowe MySQL, chyba że wyraźnie to zaznaczono.
Posiada również opcje –include-database, –exclude-database, –include-table, –exclude-table z dopasowaniem wzorca (%).
Te opcje są wygodniejsze dla użytkowników, którzy chcą wykonać kopię zapasową tylko kilku obiektów z całego zestawu danych.
Ogólnie mysqlpump dzieli swoją pracę na porcje, a każda z nich jest przypisana do wielowątkowej kolejki.
Ta kolejka wielowątkowa jest przetwarzana przez N wątków (domyślnie używa 2 wątków).
Możemy zdefiniować wiele wątków za pomocą tej opcji –default-parallelism i –parallel-schemas.
podczas przywracania używa pojedynczego wątku, który jest taki sam jak mysqldump, brakuje przywracania równoległego.
Jako dodatek mamy jeszcze jedno narzędzie, które wykonuje równoległe tworzenie kopii zapasowych i przywracanie (gdzie brakuje mysqlpump i mysqldump), które nazywa się mydumper i myloader . Będzie to bardzo przydatne podczas przywracania ogromnych zestawów danych.
Więcej szczegółowych informacji i przydatnych opcji tych narzędzi można znaleźć w tym blogu mysqldump vs. mysqlpump vs. mydumper .
źródło