mysqldump vs mysqlpump


17

Я щойно чув про mysqlpump - схоже, він був випущений з MySQL 5.7, проте MySQL 5.7 все ще включає mysqldump . Вони обидві програми резервного копіювання, але хто-небудь міг узагальнити основні відмінності? Чи існують сценарії, коли один з них може працювати краще? Чи буде mysqldump припинено для mysqlpump?


Це просто означає називати два подібних інструменти майже однаково.
Ерік

@Erik здається, що це " p arallel d ump ", і він може перекачувати дані швидше .. але в іншому випадку я згоден.
jkavalik

1
Можливо, вас також зацікавить MyDumper . Здається, що mysqlpump взяв з нього пару ідей - не погано, адже проект не рухався більше року :-(
Vérace

Мені буде цікаво переглянути деякі тести на працездатність!
Райан Фолі

XtradbBackup - ще один серйозний суперник.
Рік Джеймс

Відповіді:


16

Оскільки я випадково сам досліджував це, ось короткий опис того, що я знайшов.

Відповідно до публікації в блозі 2015 року від команди розробників MySQL , основними перевагами mysqlpump є те, що він може використовувати декілька потоків паралельно для прискорення демпінгу та те, що він не поділяє вимоги сумісності назад mysqldump, що повинно відкрити двері для подальшого поліпшення.

Однак публікація застерігає, що mysqlpump "наразі небезпечний як заміна резервного копіювання загального призначення", оскільки окремі потоки можуть генерувати свої ділянки дампа з різних станів бази даних. У ньому не згадуються плани щодо застарілого mysqldump.

Джузеппе Максія зіграв з mysqlpump у 2015 році і виявив, що швидкість демпінгу досить мала. Він оцінив нову здатність точно вибирати, які об’єкти потрібно скидати, але зауважив, що завантажувати дамп назад можна лише з однопотокових передач і що (на відміну від mysqldump) звалища можна завантажувати лише назад у бази даних з такою ж назвою.


2
Попередження: mysqlpumpпрограмне забезпечення із закритим кодом (невизначене майбутнє). Альтернативою з відкритим кодом для mysqlpumpє github.com/maxbube/mydumper mydumper
Іванов

12

Я також розглядав відмінності між цими двома утилітами, і крім того, що згадується у відповіді @ Ніла , здається, що у 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-datain dump == --skip-dump-rowsin pump
  • --no-set-namesin dump не існує в pump , але його синонім - --skip-set-charset- існує в обох
  • --ignore-table=у dump в основному --exclude-tables=знаходиться в pump, за винятком того, що --exclude-tablesможна вказати всі таблиці, розділені комами, і дозволяє використовувати символи ( %і _)
  • --tablesу dump в основному --include-tables=знаходиться в pump, за винятком того, що --include-tablesможна вказати всі таблиці, розділені комами, і дозволяє використовувати символи ( %і _). Крім того, --tablesпереорієнтоване --databasesна дамп , тоді як --include-tables=у насосі - ні.
  • --databasesі в дампах, і насос здебільшого --include-databases=знаходиться в насосі, за винятком того, що --include-databasesможна вказати всі бази даних, розділені комами, і дозволяє використовувати символи ( %і _).

3

Ось підсумок того, що я зрозумів між обома інструментами резервного копіювання.

Визначення mysqldump наведено в сторінці керівництва

Утиліта клієнта mysqldump виконує логічне резервне копіювання, виробляючи набір операторів SQL, які можуть бути виконані для відтворення вихідних визначень об'єкта бази даних та даних таблиці. Він скидає одну або кілька баз даних MySQL для резервного копіювання або передачі на інший SQL-сервер. Команда mysqldump також може генерувати вихід у форматі CSV, іншому розмежуваному тексті або форматі XML.

Mysqldump дуже простий у використанні, а також синтаксис - дуже простий. Коли ми виконуємо це, воно перетворює всі рядки в SQL-запити і друкує їх у стандартному висновку. Ми можемо перенаправити цей вихід у файл (>) або скориставшись опцією - файл результатів.

За замовчуванням 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 потоки).

  • Ми можемо визначити ряд потоків, використовуючи цей параметр –призначення-паралелізм та –паралельні схеми.

  • під час реставрації він використовує єдину нитку, таку ж, що і mysqldump, їй не вистачає паралельного відновлення.

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

Ви можете дізнатися більше деталей та корисні варіанти цього інструменту в цьому блозі mysqldump vs mysqlpump vs mydumper .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.