hot - mysql backup script
¿Cómo puedo ralentizar un volcado de MySQL para no afectar la carga actual en el servidor? (4)
Puede prefijar el comando mysqldump con lo siguiente:
ionice -c3 nice -n19 mysqldump ...
Que lo ejecutará con una baja prioridad de IO y CPU, por lo que debería limitar el impacto del mismo.
Tenga en cuenta que esto solo retrasará el tiempo entre la ejecución de MySQL. Los scripts en sí mismos seguirán siendo tan intensivos como lo eran antes, solo con un intervalo más largo entre los scripts.
Si bien hacer un volcado de MySQL es bastante fácil, tengo un servidor MySQL dedicado en vivo en el que quiero instalar la replicación. Para hacer esto, necesito volcados de las bases de datos para importar a mi esclavo de replicación.
El problema surge cuando hago los volcados, MySQL lo usa con todas sus fuerzas y ata recursos a los sitios que se conectan a él. Me pregunto si hay una manera de limitar las consultas de volcado a un estado de baja prioridad a la que se da preferencia a las conexiones en vivo. La idea es que la carga de sitios externos no se vea afectada por el esfuerzo de MySQL para hacer un volcado completo ...
Si usa tablas InnoDB, use las opciones --single-transaction y --quick para mysqldump
Tengo bases de datos muy grandes con decenas de miles de tablas, algunas de las cuales tienen hasta 5 GB de datos en 10 millones de entradas. (Tengo un servicio popular) ... Siempre tuve dolores de cabeza al hacer copias de seguridad de estas bases de datos. El uso de mysqldump predeterminado hace que la carga del servidor se descontrole rápidamente y bloquea todo ... afectando a mis usuarios. Intentar detener el proceso puede provocar la caída de tablas y un montón de tiempo de inactividad durante la recuperación de esas tablas.
Ahora uso ...
mysqldump -u USER -p --single-transaction --quick --lock-tables=false DATABASE | gzip > OUTPUT.gz
La referencia de mysqldump en dev.mysql.com incluso dice ...
Para volcar tablas grandes, debe combinar la opción --single-transaction con --quick.
No dice nada sobre que dependa de que la base de datos sea InnoDB, las mías son myISAM y esto funcionó maravillosamente para mí. La carga del servidor casi no se vio afectada y mi servicio funcionó como un Rolex durante todo el proceso. Si tiene bases de datos grandes y su copia de seguridad está afectando a su usuario final ... esta ES la solución. ;)
Use el comando nice y gzip para ejecutar el comando con la prioridad más baja.
nice -n 10 ionice -c2 -n 7 mysqldump db-name | gzip > db-name.sql.gz