mysqldump vs mysqlpump

17

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?

Ryan Foley
źródło
To oznacza po prostu wymienić dwa podobne narzędzia prawie identycznie.
Erik
@Erik wydaje się, że jest to „ p arallel d UMP ” i może pompować dane szybciej .. ale poza tym zgadzam.
jkavalik
1
Możesz być także zainteresowany MyDumper . Wygląda na to, że mysqlpump wziął z tego kilka pomysłów - niezła rzecz, ponieważ projekt nie ruszył się przez ponad rok :-(
Vérace
Byłbym zainteresowany obejrzeniem testów wydajności!
Ryan Foley
XtradbBackup to kolejny poważny konkurent.
Rick James

Odpowiedzi:

16

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.

Neil P. Quinn
źródło
2
Ostrzeżenie: mysqlpumpjest to zamknięte oprogramowanie (niepewna przyszłość). Alternatywą dla Open Source mysqlpumpjest github.com/maxbube/mydumper mydumper
Iwanow
12

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=
  • --taboraz 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-datain dump == --skip-dump-rowsin pump
  • --no-set-namesin 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-tablestego, że można określić wszystkie tabele, oddzielając je przecinkami, i pozwala na stosowanie symboli wieloznacznych ( %i _)
  • --tablesw zrzutu jest głównie --include-tables=w pompie, z wyjątkiem --include-tablestego, że można określić wszystkie tabele, oddzielone przecinkami, i pozwala na stosowanie symboli wieloznacznych ( %i _). Ponadto, --tableszastępuje --databasesw wysypisko , natomiast --include-tables=w pompy nie.
  • --databaseszarówno w zrzut, jak i pompa jest głównie --include-databases=w pompie, z wyjątkiem --include-databasestego, że można określić wszystkie bazy danych, oddzielając je przecinkami, i zezwala na znaki wieloznaczne ( %i _).
Solomon Rutzky
źródło
3

Oto podsumowanie tego, co zrozumiałem między oboma narzędziami do tworzenia kopii zapasowych.

Definicja mysqldump podana na stronie podręcznika

Narzędzie klienta mysqldump wykonuje logiczne kopie zapasowe, tworząc zestaw instrukcji SQL, które można wykonać w celu odtworzenia oryginalnych definicji obiektów bazy danych i danych tabeli. Zrzuca jedną lub więcej baz danych MySQL w celu wykonania kopii zapasowej lub przeniesienia na inny serwer SQL. Polecenie mysqldump może również generować dane wyjściowe w formacie CSV, innym tekście rozdzielanym lub formacie XML.

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

Narzędzie klienta mysqlpump wykonuje logiczne kopie zapasowe, tworząc zestaw instrukcji SQL, które można wykonać w celu odtworzenia oryginalnych definicji obiektów bazy danych i danych tabeli. Zrzuca jedną lub więcej baz danych MySQL w celu wykonania kopii zapasowej lub przeniesienia na inny serwer SQL.

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 .

aakash muthuramalingam
źródło