mysqldump vs mysqlpump


17

Ho appena sentito parlare di mysqlpump - sembra che sia stato rilasciato con MySQL 5.7, tuttavia MySQL 5.7 include ancora mysqldump . Sono entrambi programmi di backup, ma qualcuno potrebbe sintetizzare le principali differenze? Ci sono scenari in cui uno di loro potrebbe funzionare meglio? Mysqldump verrà ritirato gradualmente da mysqlpump?


Questo significa solo nominare due strumenti simili in modo quasi identico.
Erik,

@Erik sembra che sia un " p dallall dump " e può pompare i dati più velocemente .. ma per il resto sono d'accordo.
jkavalik,

1
Potrebbe interessarti anche MyDumper . Sembra che mysqlpump abbia preso un paio di idee da esso - non è una brutta cosa, dal momento che il progetto non si è spostato in più di un anno :-(
Vérace,

Sarei interessato a vedere alcuni test delle prestazioni!
Ryan Foley,

XtradbBackup è un altro contendente serio.
Rick James,

Risposte:


16

Da quando mi è capitato di ricercare questo da solo, ecco un riassunto di quello che ho trovato.

Secondo un post del blog del 2015 del team di sviluppo di MySQL , i principali vantaggi di mysqlpump sono che può utilizzare più thread in parallelo per accelerare il dumping e che non condivide i requisiti di compatibilità con le versioni precedenti di mysqldump, che dovrebbe aprire le porte a ulteriori miglioramenti.

Tuttavia, il post avverte che mysqlpump è "attualmente non sicuro come sostituzione di backup per scopi generici" perché i singoli thread possono generare le loro sezioni del dump da diversi stati del database. Non menziona alcun piano per deprecare mysqldump.

Giuseppe Maxia giocato con mysqlpump nel 2015 e ha riscontrato che la velocità di scarico era piuttosto ridotta. Ha apprezzato la nuova capacità di selezionare con precisione quali oggetti scaricare, ma ha notato che il caricamento del dump può essere eseguito solo a thread singolo e che (diversamente da mysqldump) i dump possono essere caricati nuovamente in database con lo stesso nome.


2
Attenzione: mysqlpumpè un software a sorgente chiuso (futuro incerto). Un'alternativa Open Source a mysqlpumpè github.com/maxbube/mydumper mydumper
Ivanov

12

Ho anche esaminato le differenze tra queste due utility e, oltre a quanto menzionato nella risposta di @ Neil , sembra che mysqlpump abbia anche meno opzioni di mysqldump , come non consentire quanto segue:

  • --compatible=
  • --tabe le relative opzioni di:
    • --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'altra parte, mysqlpump ha le seguenti opzioni che non sono disponibili in 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

Rinominato o simile:

  • --no-datain dump == --skip-dump-rowsin pump
  • --no-set-namesin discarica non esiste nella pompa , ma il suo sinonimo - --skip-set-charset- esiste in entrambi
  • --ignore-table=in dump è principalmente --exclude-tables=in pump tranne che --exclude-tablespuò specificare tutte le tabelle, separate da virgole e consente caratteri jolly ( %e_ )
  • --tablesin dump è principalmente --include-tables=in pump tranne che --include-tablespuò specificare tutte le tabelle, separate da virgole e consente caratteri jolly ( %e _). Inoltre, --tablessostituisce --databasesin discarica , mentre --include-tables=in pompa no.
  • --databasessia in dump che in pump è principalmente --include-databases=in pump tranne che --include-databasespuò specificare tutti i database, separati da virgole e consente caratteri jolly ( %e _).

3

Ecco il riassunto di ciò che ho capito tra entrambi gli strumenti di backup.

La definizione per mysqldump fornita nella pagina del manuale

L'utilità client mysqldump esegue backup logici, producendo una serie di istruzioni SQL che possono essere eseguite per riprodurre le definizioni degli oggetti del database originale e i dati della tabella. Scarica uno o più database MySQL per il backup o trasferisce su un altro server SQL. Il comando mysqldump può anche generare output in formato CSV, altro testo delimitato o formato XML.

Mysqldump è molto facile da usare e anche la sintassi è molto semplice. Quando lo eseguiamo, converte tutte le righe in query SQL e le stampa nell'output standard. Possiamo reindirizzare questo output su un file out (>) o usando un'opzione - file-risultato.

Per impostazione predefinita, mysqldump non scarica le tabelle information_schema e non accetta mai performance_schema. Il principale svantaggio di mysqldump è che utilizza solo un thread durante l'esecuzione di backup e ripristino.

Mysqlpump è un'altra utility che è stata introdotta in MySQL 5.7 con alcune funzionalità in più rispetto a mysqldump

La definizione per mysqlpump fornita nella pagina del manuale

L'utilità client mysqlpump esegue backup logici, producendo una serie di istruzioni SQL che possono essere eseguite per riprodurre le definizioni degli oggetti del database originale e i dati della tabella. Scarica uno o più database MySQL per il backup o trasferisce su un altro server SQL.

Le caratteristiche principali sono

  • Elaborazione parallela (multi thread) per accelerare il backup

  • Indicatore di progresso

  • Dumping degli account utente come (creare, concedere istruzioni non come inserti per il database di sistema MySQL)

Per impostazione predefinita, mysqlpump non esegue il backup dei database di sistema come lo schema delle informazioni, lo schema delle prestazioni e alcune tabelle di sistema MySQL, a meno che non sia menzionato esplicitamente.

Ha anche opzioni –include-database, –exclude-database, –include-table, –exclude-table con pattern matching (%).

Queste opzioni sono più convenienti per gli utenti che desiderano eseguire il backup di pochi oggetti da un intero set di dati.

In generale, mysqlpump divide il suo lavoro in blocchi e ognuno è assegnato a una coda multi-thread.

  • Questa coda multithread viene elaborata da N thread (per impostazione predefinita utilizza 2 thread).

  • Possiamo definire un numero di thread usando questa opzione –default-parallelism e –parallel-schemi.

  • durante il ripristino, utilizza un singolo thread che è uguale a mysqldump, privo di ripristino parallelo.

Come componente aggiuntivo, abbiamo un altro strumento che esegue la parallelizzazione sia nel backup che nel ripristino (dove manca mysqlpump e mysqldump) che si chiama mydumper e myloader . Questo sarà molto usato durante il ripristino di enormi set di dati.

Puoi trovare ulteriori dettagli e le sue utili opzioni di questi strumenti in questo blog mysqldump vs mysqlpump vs mydumper .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.