mysqldump vs mysqlpump

17

Acabo de enterarme de mysqlpump : parece que se lanzó con MySQL 5.7, pero MySQL 5.7 todavía incluye mysqldump . Ambos son programas de respaldo, pero ¿alguien podría resumir las principales diferencias? ¿Hay escenarios en los que uno de ellos podría funcionar mejor? ¿MySqldump se eliminará gradualmente para mysqlpump?

Ryan Foley
fuente
Eso solo significa nombrar dos herramientas similares casi de manera idéntica.
Erik
@Erik parece que es una " p an paralelo d UMP " y puede bombear los datos más rápido .. pero por lo demás estoy de acuerdo.
jkavalik
1
También te puede interesar MyDumper . Parece que mysqlpump ha tomado un par de ideas, no es algo malo, ya que el proyecto no se ha movido en más de un año :-(
Vérace
¡Me interesaría ver algunas pruebas de rendimiento!
Ryan Foley
XtradbBackup es otro contendiente serio.
Rick James

Respuestas:

16

Dado que yo mismo estaba investigando esto, aquí hay un resumen de lo que encontré.

Según una publicación de blog de 2015 del equipo de desarrollo de MySQL , las principales ventajas de mysqlpump son que puede usar múltiples subprocesos en paralelo para acelerar el volcado y que no comparte los requisitos de compatibilidad con versiones anteriores de mysqldump, lo que debería abrir la puerta para más mejoras

Sin embargo, la publicación advierte que mysqlpump "actualmente no es seguro como un reemplazo de respaldo de propósito general" porque los subprocesos individuales pueden generar sus secciones del volcado desde diferentes estados de la base de datos. No menciona ningún plan para desaprobar mysqldump.

Giuseppe Maxia jugó con mysqlpump en 2015 y descubrió que la velocidad de descarga era bastante pequeña. Apreciaba la nueva capacidad de seleccionar con precisión qué objetos volcar, pero señaló que cargar el volcado de nuevo solo se puede realizar con un solo subproceso y que (a diferencia de mysqldump) los volcados solo se pueden volver a cargar en bases de datos con el mismo nombre.

Neil P. Quinn
fuente
2
Advertencia: mysqlpumpes un software de código cerrado (futuro incierto). Una alternativa de código abierto mysqlpumpes github.com/maxbube/mydumper mydumper
Ivanov
12

También he estado investigando las diferencias entre estas dos utilidades, y además de lo que se menciona en la respuesta de @ Neil , parece que mysqlpump también tiene menos opciones que mysqldump , como no permitir lo siguiente:

  • --compatible=
  • --tab, y sus opciones relacionadas 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

Por otro lado, mysqlpump tiene las siguientes opciones que no están disponibles en 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

Renombrado o similar:

  • --no-dataen volcado == --skip-dump-rowsen bomba
  • --no-set-namesin dump no existe en pump , pero su sinónimo ---skip-set-charset - existe en ambos
  • --ignore-table=in dump es principalmente --exclude-tables=en pump excepto que --exclude-tablespuede especificar todas las tablas, separadas por comas, y permite caracteres comodín ( %y _)
  • --tablesin dump es principalmente --include-tables=en pump excepto que --include-tablespuede especificar todas las tablas, separadas por comas, y permite caracteres comodín ( %y _). Además, se --tablesanula --databasesen el volcado , mientras que --include-tables=en la bomba no.
  • --databasestanto en dump como en pump está principalmente --include-databases=en pump excepto que --include-databasespuede especificar todas las bases de datos, separadas por comas, y permite caracteres comodín ( %y _).
Solomon Rutzky
fuente
3

Aquí está el resumen de lo que entendí entre las dos herramientas de copia de seguridad.

La definición de mysqldump se da en la página del manual

La utilidad del cliente mysqldump realiza copias de seguridad lógicas, produciendo un conjunto de instrucciones SQL que se pueden ejecutar para reproducir las definiciones de objetos de la base de datos original y los datos de la tabla. Vuelca una o más bases de datos MySQL para realizar copias de seguridad o transferencias a otro servidor SQL. El comando mysqldump también puede generar resultados en CSV, otro texto delimitado o formato XML.

Mysqldump es muy fácil de usar y la sintaxis también es muy simple. Cuando ejecutamos esto, convierte todas las filas a consultas SQL e imprime eso en la salida estándar. Podemos redirigir esta salida a un archivo externo (>) o usando una opción: archivo de resultados.

De forma predeterminada, mysqldump no volca las tablas de información_esquema y nunca toma rendimiento_esquema. El principal inconveniente de mysqldump es que usa solo un hilo mientras realiza la copia de seguridad y la restauración.

Mysqlpump es otra utilidad que se introdujo en MySQL 5.7 con algunas características más en comparación con mysqldump

La definición de mysqlpump se da en la página del manual

La utilidad de cliente mysqlpump realiza copias de seguridad lógicas, produciendo un conjunto de instrucciones SQL que pueden ejecutarse para reproducir las definiciones de objetos de la base de datos original y los datos de la tabla. Vuelca una o más bases de datos MySQL para realizar copias de seguridad o transferencias a otro servidor SQL.

Las principales características son

  • Procesamiento en paralelo (multiproceso) para acelerar la copia de seguridad

  • Indicador de progreso

  • Volcado de cuentas de usuario como (crear, otorgar declaraciones no como inserciones para la base de datos del sistema MySQL)

De manera predeterminada, mysqlpump no realiza una copia de seguridad de las bases de datos del sistema, como el esquema de información, el esquema de rendimiento y algunas tablas del sistema MySQL, a menos que se mencione explícitamente.

También tiene opciones –include-database, –exclude-database, –include-table, –exclude-table con coincidencia de patrones (%).

Estas opciones son más convenientes para los usuarios que desean respaldar solo unos pocos objetos de un conjunto de datos completo.

En general, mysqlpump divide su trabajo en fragmentos y cada uno se asigna a una cola de subprocesos múltiples.

  • Esta cola multiproceso es procesada por N subprocesos (por defecto utiliza 2 subprocesos)

  • Podemos definir varios hilos usando esta opción –default-parallelism y –parallel-schemas.

  • Mientras que la restauración, utiliza un solo hilo que es el mismo que mysqldump, carece de restauración paralela.

Como complemento, tenemos una herramienta más que realiza la paralelización tanto en la copia de seguridad como en la restauración (donde faltan mysqlpump y mysqldump), que se llama mydumper y myloader . Esto se utilizará en gran medida al restaurar grandes conjuntos de datos.

Puede encontrar más detalles y sus opciones útiles de estas herramientas en este blog mysqldump vs mysqlpump vs mydumper .

aakash muthuramalingam
fuente