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_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
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 EXISTS
ocurre 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 .