¿Cuáles son las configuraciones óptimas de mysqldump? [cerrado]

14

Después de algunas búsquedas terminé con la siguiente configuración:

    mysqldump\
    --host=localhost\
    --port=3306\
    --databases ****\
    --user=****\
    --password=****\
    --default-character-set=utf8\
    --add-drop-database\
    --add-drop-table\
    --add-locks\
    --complete-insert\
    --extended-insert\
    --lock-all-tables\
    --create-options\
    --disable-keys\
    --quick\
    --order-by-primary\
    --set-charset\
    --tz-utc\
    > dump/test.sql

Hasta ahora todo bien, pero tengo algunas preguntas sobre los parámetros y la ejecución.

Con respecto a mi primera preocupación, solo quiero asegurarme de que todos sean obligatorios y que no causen ningún conflicto cuando se usan juntos. En última instancia, me gustaría crear un archivo de volcado muy robusto y coherente, con millones de registros, que cree tablas, bases de datos e inserte datos. Lo bueno es que hacer que la base de datos no esté disponible por un tiempo no es un problema para mí. Mi único objetivo es hacer un archivo de volcado robusto y consistente.

Con respecto a mi segundo concierto, me gustaría saber cómo informarme cuando el comando falla y, de ser así, lanzar una excepción.

¿Algunas ideas?

EDITAR

Este es mi comando actualizado mysqldump basado en los comentarios de RolandoMySQLDBA.

mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql
usuario706838
fuente
Lea cada argumento y sus beneficios y elija cuál le conviene. También conozca las secuencias de comandos para desencadenar en caso de fallas.
Mannoj
Frio. Pero esto realmente no responde a mi pregunta. Por ejemplo, ¿cuál de ellos usa USTED?
user706838
Perdone mi ignorancia, esta pregunta no se trata de recomendar un libro o un sitio web. Así que creo que no debería ser un tipo de pregunta basada en la opinión. Dicho esto, algunas respuestas serían sin duda de mayor calidad dependiendo de la experiencia y respaldadas por pruebas. En mi opinión, la pregunta está perfectamente formulada con un objetivo bien definido.
user10089632

Respuestas:

30

Va a encontrar esto impactante, pero solo necesita una opción importante: --opt

¿Qué es --opt ?

Esta opción, habilitada de forma predeterminada, es la abreviatura de la combinación de --add-drop-table --add-locks --create-options --disable-keys --extend- insert --lock-tables --quick - set-charset . Proporciona una operación de volcado rápido y produce un archivo de volcado que se puede volver a cargar en un servidor MySQL rápidamente.

Debido a que la opción - -opt está habilitada de forma predeterminada , solo especifica su inverso, la opción --skip-opt para desactivar varias configuraciones predeterminadas. Consulte la discusión sobre los grupos de opciones de mysqldump para obtener información sobre cómo habilitar o deshabilitar selectivamente un subconjunto de las opciones afectadas por --opt.

Desde --opt ya está habilitado, no es necesario que especifique --opt . No obstante, es posible que necesite algunas opciones necesarias que no están incluidas.

Ejecute esta consulta en su base de datos

SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;

Si tiene todas las tablas de InnoDB, debe especificar --single-transaction . Esto se desactivará automáticamente --lock-tables y le permitirá volcar todas las tablas en el mismo punto en el tiempo y permitirá que lleguen nuevas escrituras al mismo tiempo.

Si tiene una o más tablas MyISAM, debe especificar --lock-all-tables . Esto desactivará automáticamente --lock-tables , desactivará --single-transaction , bloqueará todas las tablas en todas las bases de datos y luego creará el volcado. Todavía se pueden escribir en tablas InnoDB, pero se pondrán en cola hasta que se liberen los bloqueos. Cualquier conexión de DB que intente escribir en cualquier tabla MyISAM se suspenderá hasta que se liberen todos los bloqueos.

Ejecute esta consulta: SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;

Si Number_Of_Stored_Procedureses mayor que cero, use --rutinas .

Ejecute esta consulta: SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;

Si Number_Of_Triggerses mayor que cero, use --triggers .

PRECAUCIÓN : No utilice --orde-by-primary para volcar todas las bases de datos porque potencialmente puede hacer que los índices BTREE sean bastante desiguales en la recarga. --ordenar por primaria solo debe usarse cuando se descarta una tabla individual que sabe que tiene una clave primaria entera y tendrá muchos escaneos de rango de su aplicación.

Si necesita más tipos creativos de copias de seguridad de mysqldump, vea mi publicación anterior ¿Cómo puedo optimizar un mysqldump de una base de datos grande?.

Por favor, lea todas las opciones para mysqldump .

ACTUALIZACIÓN 2014-12-29 09:44 EST

He actualizado mi comando mysqldump (vea mi edición). Sin embargo, tengo una última pregunta. ¿Crees que valdría la pena usar todos los siguientes argumentos también? --add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc

Mirando tu comentario y tu última edición, veamos cada una de estas opciones y veamos si necesitas alguna de ellas.

  • --opt : ya dije que no es necesario especificarlo porque está habilitado de forma predeterminada.
  • - retrasado-insertado : me mantengo alejado de esto con una base de datos completa de InnoDB. ¡De hecho, me mantengo alejado de este PERIODO! . Dado que 1) es posible que INSERT DELAYED pueda perder datos, 2) se convierte en INSERT para esclavos de replicación MySQL, 3) hay un informe de error abierto sobre su uso con disparadores en MySQL 5.6 y no se considera un error , 4 ) está en desuso en MySQL 5.6 y 5) Morgan Tocker (conocido MySQL Guru) previó su desaprobación en 2012 , debe olvidar que esta opción existió alguna vez. ¡Nunca, nunca (infinito) lo uses!
  • --complete-insert : se usará en INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...lugar de INSERT INTO tblname VALUES .... Esto podría inflar mysqldump si hay muchas columnas en la definición de la tabla y muchas filas en la tabla. No lo uses
  • --add-drop-table : dado que --opt lo habilita para usted, no necesita especificarlo.
  • --add-drop-database : si suelta --add-drop-database , solo hace que el DROP TABLE IF EXISTS(que fue agregado por --add-drop-table ) vaya más rápido. No usarlo simplemente DROP TABLE IF EXISTSocurre para cada tabla. Por lo tanto, usar --add-drop-database es una cuestión de elección personal.
  • --tz-utc : si planea restaurar los datos en el mismo servidor desde el que realiza la copia de seguridad, no necesita --tz-utc . Si restaura los datos a otro centro de datos en una zona horaria diferente y ...
    • si desea mantener la misma zona horaria desde la que realiza la copia de seguridad, no necesita --tz-utc .
    • si desea que los datos utilicen la zona horaria de un nuevo centro de datos, necesita --tz-utc .
    • EJEMPLO: Digamos que respaldas una base de datos en Nueva York. Eso es EST. Si tiene otro centro de datos en Seattle, sería PST. Si desea que la copia de seguridad de Nueva York se restaure en Seattle y desea que las marcas de tiempo en la base de datos sigan representando a Nueva York, no desea usar --tz-utc .
  • - conjunto de caracteres predeterminado

Ajuste su última edición, esto es lo que necesita particularmente

mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql

Una vez más, le digo que lea todas las opciones para mysqldump .

RolandoMySQLDBA
fuente
Acerca de --add-drop-database: ¿no garantiza esto que no haya otras tablas aleatorias en su base de datos que no estén en su volcado? Si alguien creara manualmente una tabla de prueba aleatoria en su base de datos, aún existiría después de recargar desde el volcado sin esta opción. Entonces, depende de si quieres eso o no. ¿Derecho?
jschultz410
¿Qué hay de --add-drop-trigger?
lonix