mysqldump vs mysqlpump

17

Я только что услышал о mysqlpump - похоже, он был выпущен с MySQL 5.7, однако MySQL 5.7 все еще включает mysqldump . Они обе программы резервного копирования, но может ли кто-нибудь обобщить основные различия? Существуют ли сценарии, когда один из них может работать лучше? Будет ли поэтапный отказ от mysqldump для mysqlpump?

Райан Фоли
источник
Это просто значит назвать два одинаковых инструмента почти одинаково.
Эрик
@Erik кажется , что это « р arallel d УМЗ » , и он может перекачивать данные быстрее .. но в остальном я согласен.
jkavalik
1
Вы также можете быть заинтересованы в MyDumper . Похоже, что mysqlpump взял несколько идей из этого - неплохая вещь, так как проект не продвинулся больше года :-(
Vérace
Мне было бы интересно увидеть некоторые тесты производительности!
Райан Фоли
XtradbBackup - еще один серьезный соперник.
Рик Джеймс

Ответы:

16

Так как мне довелось исследовать это самостоятельно, вот краткое изложение того, что я нашел.

Согласно сообщению в блоге от команды разработчиков MySQL за 2015 год , основными преимуществами mysqlpump является то, что он может использовать несколько потоков параллельно для ускорения создания дампа, и что он не разделяет требования обратной совместимости mysqldump, что должно открыть дверь для дальнейшего развития. улучшения.

Тем не менее, пост предупреждает, что mysqlpump "в настоящее время небезопасен в качестве замены резервной копии общего назначения", поскольку отдельные потоки могут генерировать свои разделы дампа из разных состояний базы данных. Там не упоминается о каких-либо планах отказаться от mysqldump.

Джузеппе Максия поиграл с mysqlpump в 2015 году и обнаружил, что скорость демпинга довольно мала. Он высоко оценил новую возможность точного выбора объектов для выгрузки, но отметил, что загрузка дампа обратно может быть выполнена только однопоточным и что (в отличие от mysqldump) дампы могут быть загружены обратно только в базы данных с тем же именем.

Нил П. Куинн
источник
2
Предупреждение: mysqlpumpэто программное обеспечение с закрытым исходным кодом (неопределенное будущее). Альтернативой Open Source mysqlpumpявляется github.com/maxbube/mydumper mydumper
Иванов
12

Я также изучал различия между этими двумя утилитами, и в дополнение к тому, что упомянуто в ответе @ Neil , кажется, что mysqlpump также имеет меньше параметров, чем mysqldump , например, не учитывает следующее:

  • --compatible=
  • --tabи связанные с ним варианты:
    • --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

С другой стороны, mysqlpump имеет следующие параметры, которые недоступны в 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

Переименовано или похоже:

  • --no-dataв дампе == --skip-dump-rowsв насосе
  • --no-set-namesв дампе не существует в насосе , но его синоним - --skip-set-charset- существует в обоих
  • --ignore-table=в дампе, в основном, --exclude-tables=в pump, за исключением того, что --exclude-tablesможет указывать все таблицы, разделенные запятыми, и допускает использование подстановочных знаков ( %и _)
  • --tablesв дампе находится в основном --include-tables=в pump, за исключением того, что --include-tablesможет указывать все таблицы, разделенные запятыми, и допускает использование подстановочных знаков ( %и _). Также --tablesпереопределяет --databasesв дампе , а --include-tables=в насосе нет.
  • --databasesкак в dump, так и в pump, в основном, --include-databases=в pump, за исключением того, что --include-databasesможно указать все базы данных, разделенные запятыми, и допускает использование подстановочных знаков ( %и _).
Соломон Руцкий
источник
3

Вот краткое изложение того, что я понял между обоими инструментами резервного копирования.

Определение для mysqldump дано на странице руководства

Клиентская утилита mysqldump выполняет логическое резервное копирование, создавая набор операторов SQL, которые можно выполнить для воспроизведения исходных определений объектов базы данных и данных таблиц. Он создает одну или несколько баз данных MySQL для резервного копирования или передачи на другой сервер SQL. Команда mysqldump также может генерировать выходные данные в формате CSV, другом тексте с разделителями или формате XML.

Mysqldump очень прост в использовании и синтаксис также очень прост. Когда мы выполняем это, он преобразует все строки в запросы SQL и печатает их в стандартном выводе. Мы можем перенаправить этот вывод в outfile (>) или используя опцию - result-file.

По умолчанию mysqldump не создает дамп таблиц information_schema и никогда не использует performance_schema. Основным недостатком mysqldump является то, что он использует только один поток при выполнении резервного копирования и восстановления.

Mysqlpump - это еще одна утилита, которая была представлена ​​в MySQL 5.7 с несколькими дополнительными функциями по сравнению с mysqldump.

Определение для mysqlpump дано на странице руководства

Клиентская утилита mysqlpump выполняет логическое резервное копирование, создавая набор операторов SQL, которые можно выполнить для воспроизведения исходных определений объектов базы данных и данных таблиц. Он создает одну или несколько баз данных MySQL для резервного копирования или передачи на другой сервер SQL.

Основные функции

  • Параллельная обработка (многопоточная) для ускорения резервного копирования

  • Индикатор прогресса

  • Сброс учетных записей пользователей как (создание, предоставление операторов не как вставки для базы данных системы MySQL)

По умолчанию mysqlpump не выполняет резервное копирование системных баз данных, таких как информационная схема, схема производительности и некоторые системные таблицы MySQL, если это не указано явно.

Также есть опции –include-database, –exclude-database, –include-table, –exclude-table с сопоставлением с образцом (%).

Эти параметры более удобны для пользователей, которые хотят создавать резервные копии только нескольких объектов из всего набора данных.

В общем, mysqlpump делит свою работу на куски, и каждый из них назначается многопоточной очереди.

  • Эта многопоточная очередь обрабатывается N потоками (по умолчанию используется 2 потока).

  • Мы можем определить несколько потоков, используя эту опцию –default -rallelism и –parallel-schemas.

  • во время восстановления он использует один поток, который совпадает с mysqldump, ему не хватает параллельного восстановления.

В качестве дополнения у нас есть еще один инструмент, который выполняет распараллеливание как при резервном копировании, так и при восстановлении (где отсутствуют mysqlpump и mysqldump), который называется mydumper и myloader . Это будет очень полезно при восстановлении огромных наборов данных.

Вы можете найти более подробную информацию и полезные опции этого инструмента в этом блоге mysqldump vs mysqlpump vs mydumper .

Аакаш Мутурамалингам
источник