sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la forma más rápida de volcar y cargar una base de datos MySQL InnoDB usando mysqldump?

Volcar RÁPIDAMENTE una base de datos inactiva:

El uso de la opción "-T" con mysqldump genera muchos archivos .sql y .txt en el directorio especificado. Esto es aproximadamente un 50 % más rápido para volcar tablas grandes que un solo archivo .sql con instrucciones INSERT (toma 1/3 menos de tiempo de reloj de pared).

Además, hay un gran beneficio al restaurar si puede cargar varias tablas en paralelo y saturar varios núcleos. En una caja de 8 núcleos, esto podría ser tanto como una diferencia de 8X en el tiempo de reloj de pared para restaurar el volcado, además de las mejoras de eficiencia proporcionadas por "-T". Debido a que "-T" hace que cada tabla se almacene en un archivo separado, cargarlas en paralelo es más fácil que dividir un archivo .sql enorme.

Llevando las estrategias anteriores a su extremo lógico, se podría crear un script para volcar una base de datos ampliamente en paralelo. Bueno, eso es exactamente lo que hace Maakit mk-parallel-dump (ver http:/ /www.maatkit.org/doc/mk-parallel-dump.html ) y las herramientas mk-parallel-restore son; secuencias de comandos perl que realizan varias llamadas al programa mysqldump subyacente. Sin embargo, cuando traté de usarlos, tuve problemas para completar la restauración sin errores de clave duplicada que no ocurrieron con los volcados de vainilla, así que tenga en cuenta que su kilometraje puede variar.

Descargar datos de una base de datos LIVE (sin interrupción del servicio):

El modificador --single-transaction es muy útil para realizar un volcado de una base de datos activa sin tener que desactivarla o realizar un volcado de una base de datos esclava sin tener que dejar de ser esclava.

Lamentablemente, -T no es compatible con --single-transaction, por lo que solo obtiene una.

Por lo general, realizar el volcado es mucho más rápido que restaurarlo. Todavía hay espacio para una herramienta que tome el archivo de volcado monolítico entrante y lo divida en varias partes para cargarlas en paralelo. Que yo sepa, tal herramienta aún no existe.

Transferir el volcado a través de la red suele ser una victoria

Para escuchar un volcado entrante en una ejecución de host:

nc -l 7878 > mysql-dump.sql

Luego, en su servidor de base de datos, ejecute

mysqldump $OPTS | nc myhost.mydomain.com 7878

Esto reduce la contención de que los ejes del disco en el maestro escriban el volcado en el disco, lo que acelera ligeramente el volcado (suponiendo que la red sea lo suficientemente rápida para mantenerse al día, una suposición bastante segura para dos hosts en el mismo centro de datos). Además, si está construyendo un nuevo esclavo, esto le ahorra el paso de tener que transferir el archivo de volcado una vez que haya terminado.

Advertencias:obviamente, debe tener suficiente ancho de banda de red para no ralentizar las cosas de manera insoportable, y si la sesión de TCP se interrumpe, debe comenzar de nuevo, pero para la mayoría de los volcados esto no es una preocupación importante.

Por último, quiero aclarar un punto de confusión común.

A pesar de la frecuencia con la que ve estos indicadores en los ejemplos y tutoriales de mysqldump, son superfluos porque están activados de forma predeterminada:

  • --opt
  • --add-drop-table
  • --add-locks
  • --create-options
  • --disable-keys
  • --extended-insert
  • --lock-tables
  • --quick
  • --set-charset .

Desde http://dev.mysql.com/doc/refman/ 5.1/es/mysqldump.html :

De esos comportamientos, "--quick" es uno de los más importantes (omite el almacenamiento en caché de todo el conjunto de resultados en mysqld antes de transmitir la primera fila), y puede ser con "mysql" (que NO activa --quick de forma predeterminada) para acelerar drásticamente las consultas que devuelven un gran conjunto de resultados (por ejemplo, volcar todas las filas de una tabla grande).