mysqldump vs mysqlpump

17

Acabei de ouvir sobre o mysqlpump - parece que ele foi lançado com o MySQL 5.7, no entanto o MySQL 5.7 ainda inclui o mysqldump . Ambos são programas de backup, mas alguém poderia resumir as principais diferenças? Existem cenários em que um deles pode funcionar melhor? O mysqldump será extinto para o mysqlpump?

Ryan Foley
fonte
Isso significa apenas nomear duas ferramentas semelhantes quase de forma idêntica.
Erik
@Erik parece que ele é um " p arallel d UMP " e pode bombear os dados mais rapidamente .. mas por outro lado eu concordo.
Jkavalik 22/10/2015
1
Você também pode estar interessado em MyDumper . Parece que o mysqlpump tirou algumas idéias dele - não é uma coisa ruim, já que o projeto não se move há mais de um ano :-(
Vérace 23/15
Eu estaria interessado em ver alguns testes de desempenho!
Ryan Foley
O XtradbBackup é outro candidato sério.
21415 Rick Rick #

Respostas:

16

Desde que eu estava pesquisando isso sozinho, aqui está um resumo do que encontrei.

De acordo com um post de 2015 da equipe de desenvolvimento do MySQL , as principais vantagens do mysqlpump são que ele pode usar vários threads em paralelo para acelerar o dumping e que não compartilha os requisitos de compatibilidade com versões anteriores do mysqldump, o que deve abrir a porta para mais informações. melhorias.

No entanto, a publicação alerta que o mysqlpump é "atualmente inseguro como uma substituição de backup de uso geral" porque threads individuais podem gerar suas seções do dump a partir de diferentes estados do banco de dados. Ele não menciona nenhum plano para descontinuar o mysqldump.

Giuseppe Maxia brincou com o mysqlpump em 2015 e descobriu que a velocidade de despejo era bastante pequena. Ele apreciou a nova capacidade de selecionar com precisão quais objetos despejar, mas observou que o carregamento do despejo de volta só pode ser feito com thread único e que (ao contrário do mysqldump) os despejos só podem ser carregados de volta nos bancos de dados com o mesmo nome.

Neil P. Quinn
fonte
2
Aviso: mysqlpumpé um software de código fechado (futuro incerto). Uma alternativa Open Source para mysqlpumpé github.com/maxbube/mydumper mydumper
Ivanov
12

Também estive analisando as diferenças entre esses dois utilitários e, além do que é mencionado na resposta do @ Neil , parece que o mysqlpump também tem menos opções que o mysqldump , como não permitir o seguinte:

  • --compatible=
  • --tab, e suas opções relacionadas:
    • --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

Por outro lado, o mysqlpump possui as seguintes opções que não estão disponíveis no 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

Renomeado ou similar:

  • --no-datano despejo ==--skip-dump-rows na bomba
  • --no-set-namesno dump não existe na bomba , mas seu sinônimo - --skip-set-charset- existe nos dois
  • --ignore-table=no dump é principalmente --exclude-tables=no pump, exceto que --exclude-tablespode especificar todas as tabelas, separadas por vírgulas, e permite caracteres curinga ( %e _)
  • --tablesno dump é principalmente --include-tables=no pump, exceto que --include-tablespode especificar todas as tabelas, separadas por vírgulas, e permite caracteres curinga ( %e _). Além disso, --tablessubstitui --databasesno dump , enquanto --include-tables=no pump não.
  • --databasesno dump e no pump é principalmente --include-databases=no pump, exceto que --include-databasespode especificar todos os bancos de dados, separados por vírgulas, e permite caracteres curinga ( %e _).
Solomon Rutzky
fonte
3

Aqui está o resumo do que eu entendi entre as duas ferramentas de backup.

A definição para mysqldump dada na página de manual

O utilitário cliente mysqldump executa backups lógicos, produzindo um conjunto de instruções SQL que podem ser executadas para reproduzir as definições originais dos objetos de banco de dados e os dados da tabela. Ele despeja um ou mais bancos de dados MySQL para backup ou transferência para outro servidor SQL. O comando mysqldump também pode gerar saída em CSV, outro texto delimitado ou formato XML.

O Mysqldump é muito fácil de usar e a sintaxe também é muito simples. Quando executamos isso, ele converte todas as linhas em consultas SQL e as imprime na saída padrão. Podemos redirecionar essa saída para um arquivo externo (>) ou usando uma opção - resultado-arquivo.

Por padrão, o mysqldump não despeja tabelas information_schema e nunca utiliza performance_schema. A principal desvantagem do mysqldump é que ele usa apenas um thread enquanto faz backup e restauração.

Mysqlpump é outro utilitário que foi introduzido no MySQL 5.7 com mais alguns recursos quando comparado com o mysqldump

A definição para mysqlpump dada na página de manual

O utilitário cliente mysqlpump executa backups lógicos, produzindo um conjunto de instruções SQL que podem ser executadas para reproduzir as definições originais dos objetos de banco de dados e os dados da tabela. Ele despeja um ou mais bancos de dados MySQL para backup ou transferência para outro servidor SQL.

Os principais recursos são

  • Processamento paralelo (multiencadeado) para acelerar o backup

  • Indicador de Progresso

  • Despejo de contas de usuário como (criar, conceder instruções não como inserções para o banco de dados do sistema MySQL)

Por padrão, o mysqlpump não faz backup de bancos de dados do sistema, como esquema de informações, esquema de desempenho e algumas tabelas de sistema do MySQL, a menos que mencionado explicitamente.

Ele também possui as opções –include-database, –exclude-database, –include-table, –exclude-table com correspondência de padrão (%).

Essas opções são mais convenientes para usuários que desejam fazer backup de apenas alguns objetos de um conjunto de dados inteiro.

Em geral, o mysqlpump divide seu trabalho em partes e cada uma é atribuída a uma fila multiencadeada.

  • Essa fila multithread é processada por N threads (por padrão, usa 2 threads).

  • Podemos definir um número de encadeamentos usando esta opção –default-parallelism e –parallel-schemas.

  • Enquanto restauração, ele usa um único thread que é o mesmo que mysqldump, falta restauração paralela.

Como complemento, temos mais uma ferramenta que executa paralelização no backup e na restauração (onde o mysqlpump e o mysqldump não têm), chamado mydumper e myloader . Isso será muito usado ao restaurar grandes conjuntos de dados.

Você pode encontrar mais alguns detalhes e suas opções úteis dessas ferramentas neste blog mysqldump vs mysqlpump vs mydumper .

aakash muthuramalingam
fonte