web-dev-qa-db-fra.com

mysqldump vs mysqlpump

Je viens d'entendre parler de mysqlpump - on dirait qu'il a é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?

21
Ryan Foley

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

Selon n 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 dumping et qu'il ne partage pas les exigences de compatibilité descendante de mysqldump, ce qui devrait ouvrir la porte à de nouvelles améliorations.

Cependant, la publication 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 joué avec mysqlpump en 2015 et a trouvé que l'accélération du dumping était assez petite. Il a apprécié la nouvelle possibilité de sélectionner précisément les objets à vider, 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.

19
Neil P. Quinn

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

  • --compatible=
  • --tab, et ses options associées 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'autre part, 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-data dans vidage == --skip-dump-rows dans pompe
  • --no-set-names dans vidage n'existe pas dans pompe , mais son synonyme - - --skip-set-charset - existe dans les deux
  • --ignore-table= dans le vidage est principalement --exclude-tables= dans pompe sauf --exclude-tables peut spécifier toutes les tables, séparées par des virgules, et autorise les caractères génériques (% et _)
  • --tables dans le vidage est principalement --include-tables= dans pompe sauf --include-tables peut spécifier toutes les tables, séparées par des virgules, et autorise les caractères génériques (% et _). Aussi, --tables remplace --databases dans vidage , tandis que --include-tables= dans la pompe ne fonctionne pas.
  • --databases dans les deux vidage et pompe est principalement --include-databases= dans pompe sauf --include-databases peut spécifier toutes les bases de données, séparées par des virgules, et autorise les caractères génériques (% et _).
12
Solomon Rutzky

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 pendant la sauvegarde et 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

  • Dump des comptes utilisateurs en tant que (créer, accorder des relevés et 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 dispose également d'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 .

3