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
fuente
Respuestas:
Va a encontrar esto impactante, pero solo necesita una opción importante: --opt
¿Qué es --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
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_Procedures
es mayor que cero, use --rutinas .Ejecute esta consulta:
SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Si
Number_Of_Triggers
es 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
Mirando tu comentario y tu última edición, veamos cada una de estas opciones y veamos si necesitas alguna de ellas.
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
lugar deINSERT 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 usesDROP TABLE IF EXISTS
(que fue agregado por --add-drop-table ) vaya más rápido. No usarlo simplementeDROP TABLE IF EXISTS
ocurre para cada tabla. Por lo tanto, usar --add-drop-database es una cuestión de elección personal.Ajuste su última edición, esto es lo que necesita particularmente
Una vez más, le digo que lea todas las opciones para mysqldump .
fuente
--add-drop-trigger
?