mysqldump vs mysqlpump

17

Je viens d'entendre parler de mysqlpump - il semble qu'il ait été publié avec MySQL 5.7, mais MySQL 5.7 inclut toujours mysqldump . Ce sont deux programmes de sauvegarde, mais quelqu'un pourrait-il résumer les principales différences? Existe-t-il des scénarios où l'un d'entre eux pourrait fonctionner mieux? Mysqldump va-t-il être supprimé pour mysqlpump?

Ryan Foley
la source
Cela signifie simplement nommer deux outils similaires de manière presque identique.
Erik
@Erik semble que c'est un « p arallel d ump » et il peut pomper les données plus rapidement .. mais sinon je suis d' accord.
jkavalik
1
Vous pourriez également être intéressé par MyDumper . Il semble que mysqlpump en ait pris quelques idées - pas une mauvaise chose, car le projet n'a pas bougé depuis plus d'un an :-(
Vérace
Je serais intéressé à voir des tests de performances!
Ryan Foley
XtradbBackup est un autre concurrent sérieux.
Rick James

Réponses:

16

Depuis que je fais des recherches sur ce sujet moi-même, voici un résumé de ce que j'ai trouvé.

Selon un article de blog de 2015 de l'équipe de développement MySQL , les principaux avantages de mysqlpump sont qu'il peut utiliser plusieurs threads en parallèle pour accélérer le vidage et qu'il ne partage pas les exigences de compatibilité descendante de mysqldump, ce qui devrait ouvrir la porte pour plus de détails. améliorations.

Cependant, le message prévient que mysqlpump est "actuellement dangereux en tant que remplacement de sauvegarde à usage général" car des threads individuels peuvent générer leurs sections du vidage à partir de différents états de la base de données. Il ne mentionne aucun projet de dépréciation de mysqldump.

Giuseppe Maxia a joué avec mysqlpump en 2015 et a trouvé l'accélération du dumping assez faible. Il a apprécié la nouvelle possibilité de sélectionner précisément les objets à sauvegarder, mais a noté que le chargement de la sauvegarde ne peut être effectué que sur un seul thread et que (contrairement à mysqldump) les sauvegardes ne peuvent être rechargées que dans des bases de données portant le même nom.

Neil P. Quinn
la source
2
Avertissement: mysqlpumplogiciel fermé (avenir incertain). Une alternative Open Source à mysqlpumpest github.com/maxbube/mydumper mydumper
Ivanov
12

J'ai également examiné les différences entre ces deux utilitaires, et en plus de ce qui est mentionné dans la réponse de @ Neil , il semble que mysqlpump ait également moins d'options que mysqldump , comme ne pas autoriser les éléments suivants:

  • --compatible=
  • --tabet ses options connexes de:
    • --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

D'un autre côté, mysqlpump a les options suivantes qui ne sont pas disponibles dans 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

Renommé ou similaire:

  • --no-dataen décharge == --skip-dump-rowsen pompe
  • --no-set-namesdans le vidage n'existe pas dans la pompe , mais son synonyme - --skip-set-charset- existe dans les deux
  • --ignore-table=in dump est principalement --exclude-tables=dans pump, sauf qu'il --exclude-tablespeut spécifier toutes les tables, séparées par des virgules, et autorise les caractères génériques ( %et _)
  • --tablesin dump est principalement --include-tables=dans pump, sauf qu'il --include-tablespeut spécifier toutes les tables, séparées par des virgules, et autorise les caractères génériques ( %et _). En --tablesoutre , les remplacements --databasesdans le vidage , contrairement --include-tables=à la pompe .
  • --databasesà la fois dans le vidage et la pompe se trouve principalement --include-databases=dans la pompe, sauf qu'il --include-databasespeut spécifier toutes les bases de données, séparées par des virgules, et autorise les caractères génériques ( %et _).
Solomon Rutzky
la source
3

Voici le résumé de ce que j'ai compris entre les deux outils de sauvegarde.

La définition de mysqldump donnée dans la page de manuel

L'utilitaire client mysqldump effectue des sauvegardes logiques, produisant un ensemble d'instructions SQL qui peuvent être exécutées pour reproduire les définitions d'objet de base de données d'origine et les données de table. Il sauvegarde une ou plusieurs bases de données MySQL pour la sauvegarde ou les transferts vers un autre serveur SQL. La commande mysqldump peut également générer une sortie au format CSV, autre texte délimité ou format XML.

Mysqldump est très facile à utiliser et la syntaxe est également très simple. Lorsque nous l'exécutons, il convertit toutes les lignes en requêtes SQL et les affiche en sortie standard. Nous pouvons rediriger cette sortie vers un outfile (>) ou en utilisant une option - result-file.

Par défaut, mysqldump ne vide pas les tables information_schema et il ne prend jamais performance_schema. L'inconvénient majeur de mysqldump est qu'il n'utilise qu'un seul thread lors de la sauvegarde et de la restauration.

Mysqlpump est un autre utilitaire qui a été introduit dans MySQL 5.7 avec quelques fonctionnalités supplémentaires par rapport à mysqldump

La définition de mysqlpump donnée dans la page de manuel

L'utilitaire client mysqlpump effectue des sauvegardes logiques, produisant un ensemble d'instructions SQL qui peuvent être exécutées pour reproduire les définitions d'objet de base de données d'origine et les données de table. Il sauvegarde une ou plusieurs bases de données MySQL pour la sauvegarde ou les transferts vers un autre serveur SQL.

Les principales caractéristiques sont

  • Traitement parallèle (multi thread) pour accélérer la sauvegarde

  • Indicateur de progrès

  • Vidage des comptes utilisateurs en tant que (créer, accorder des relevés non en tant qu'inserts pour la base de données système MySQL)

Par défaut, mysqlpump ne prend pas de sauvegarde des bases de données système telles que le schéma d'informations, le schéma de performances et certaines tables système MySQL, sauf indication contraire explicite.

Il a également des options –include-database, –exclude-database, –include-table, –exclude-table avec correspondance de modèle (%).

Ces options sont plus pratiques pour les utilisateurs qui souhaitent sauvegarder uniquement quelques objets d'un ensemble de données entier.

En général, mysqlpump divise son travail en morceaux et chacun est affecté à une file d'attente multithread.

  • Cette file d'attente multithread est traitée par N threads (par défaut, elle utilise 2 threads).

  • Nous pouvons définir un certain nombre de threads en utilisant cette option –default-parallelism et –parallel-schemas.

  • pendant la restauration, il utilise un seul thread qui est le même que mysqldump, il manque une restauration parallèle.

En tant que module complémentaire, nous avons un autre outil qui effectue la parallélisation à la fois dans la sauvegarde et la restauration (où manquent mysqlpump et mysqldump) qui est appelé mydumper et myloader . Cela sera grandement utilisé lors de la restauration d'énormes ensembles de données.

Vous pouvez trouver plus de détails et ses options utiles de ces outils dans ce blog mysqldump vs mysqlpump vs mydumper .

aakash muthuramalingam
la source