Estoy ejecutando copias de seguridad nocturnas en mi servidor usando mysqldump. Desafortunadamente, eso prácticamente mata mi sitio durante aproximadamente media hora todas las noches, ya que las tablas se bloquean durante la copia de seguridad.
Según la lista de procesos, incluso parece que las consultas en tablas no relacionadas a veces se bloquean, por ejemplo, "INSERT INTO A" está en estado bloqueado durante varios minutos mientras que la única consulta en ejecución solo toca la tabla B.
¿Existe una mejor manera de hacer copias de seguridad como esta?
Respuesta1
Tienes dos opciones:
R. Utilice --skip-lock-tables
la opción mysqldump. Sus tablas no estarán bloqueadas, pero es posible que su copia de seguridad no sea consistente (depende de su esquema: si las transacciones de su base de datos tocan varias tablas a la vez y una tabla ya tiene una copia de seguridad y la otra no. Por ejemplo: dos tablas: clientes y pedidos si primero se realiza una copia de seguridad de los clientes y luego se inserta un nuevo par de cliente/pedido, es posible que termine con un pedido sin cliente en su copia de seguridad).
Este problema es la razón principal por la que mysqldump bloquea todas las tablas de forma predeterminada. Si este problema no se aplica a usted, omitir el bloqueo de la tabla en MySQL es la solución más sencilla.
B. Utilice algún otro método de respaldo. Por ejemplo: vacíe tablas con bloqueo de lectura, cree una instantánea LVM, desbloquee tablas, monte su instantánea LVM y haga una copia de seguridad de sus datos. Esto se vuelve rápidamente, mucho más complejo que el simple mysqldump. Google "copias de seguridad mysql con instantáneas LVM", hay muchos scripts y tutoriales disponibles.
Si sus datos MySQL no están en un volumen LVM, puede crear un servidor MySQL esclavo y hacer una copia de seguridad, sin tocar el maestro, de modo que el bloqueo se produzca en el esclavo y el maestro siempre esté libre.