Copia de seguridad lógica coherente de bases de datos que usan motores MyISAM e InnoDB

8

Tengo una pregunta sobre la copia de seguridad lógica de las bases de datos MySQL que usan MyISAM e InnoDB.

La mysqldumputilidad admite estas dos opciones:

  • - transacción única : crea una instantánea coherente volcando todas las tablas en una sola transacción. Funciona SOLO para tablas almacenadas en motores de almacenamiento que admiten multiversioning (actualmente solo InnoDB lo hace) La opción [...] apaga automáticamente --lock-tables.

  • -x, --lock-all-tables : bloquea todas las tablas en todas las bases de datos. Esto se logra tomando un bloqueo de lectura global durante todo el volcado. Desactiva automáticamente --single-transaction y --lock-tables.

    • Para InnoDB, necesitamos --single-transaction

    • para MyISAM, necesitamos - lock-tables o lock-all-tables (en caso de que necesitemos coherencia entre bases de datos).

Entonces, ¿cómo se supone que se debe hacer una copia de seguridad de una base de datos híbrida (una base de datos que usa los motores MyISAM e InnoDB)?

Editar:

Solo para aclarar, la pregunta podría reformularse así:

¿Las opciones de bloqueo- [todas-] tablas garantizan una copia de seguridad consistente de las tablas InnoDB?

Dimitre Radoulov
fuente

Respuestas:

8

Con mysqldump solo puede usar de forma segura --single-transactionsi todas sus tablas son InnoDB, de lo contrario su copia de seguridad es inconsistente.

Si tiene el requisito de una copia de seguridad híbrida, entonces necesita la lock-tablesen todas las tablas de la copia de seguridad (predeterminada), que será segura para todos los motores. También vale la pena mencionar que las opciones predeterminadas asegurarán que su copia de seguridad sea segura, no necesita activar ningún indicador especial.

Nota: Si tiene una mezcla híbrida, quizás mire xtrabackup. Solo se bloqueará durante la fase MyISAM de la copia de seguridad.

Morgan Tocker
fuente
Estaba a punto de publicar esto, pero me ganaste. Enlace relevante: percona.com/doc/percona-xtrabackup/innobackupex/…
Derek Downey
Gracias por confirmar que las tablas de bloqueo garantizan una copia de seguridad consistente para ambos motores. Actualmente estoy mirando Zmanda Recovery Manager para MySQL (también echaré un vistazo a xtrabackup).
Dimitre Radoulov
Zmanda es solo un administrador de GUI para todos los demás métodos de copia de seguridad. Estoy bastante seguro de que es compatible con xtrabackup.
Morgan Tocker
Hola @Morgan Tocker, Zmanda también proporciona un conjunto de secuencias de comandos (zrm- *) que realmente ejecutan varios tipos de copias de seguridad: lógicas, sin formato e instantáneas. Todas las bases de datos que administramos son híbridas, por lo que tiene poco valor usar un producto separado; no podemos evitar el bloqueo durante la copia de seguridad.
Dimitre Radoulov
Esta respuesta dice que si uno usa mysqldump y especifica que --lock-all-tablesla copia de seguridad será consistente, ¿verdad? Y uno necesita ejecutar mysqldump solo una vez: será seguro tanto para InnoDB como para MyISAM al mismo tiempo, ¿verdad?
KajMagnus
2

Como una idea adicional para su situación, tal vez sea útil dedicar algunas ideas a configurar una configuración de esclavo maestro, donde su copia de seguridad se realiza desde el esclavo.

Una base de datos MySQL con una combinación de InnoDB y MyISAM siempre (hasta donde yo sé en cada configuración y con cada herramienta de copia de seguridad) bloqueará las tablas MyISAM para la fase de copia de seguridad MyISAM.

Para evitar este bloqueo, use esta configuración:

  • Servidor A: mysql Master
  • Servidor B: mysql Slave (conectado al servidor A)

Todas las escrituras y lecturas van al Servidor A (Maestro). El servidor B (esclavo) solo se usa para la copia de seguridad. En el esclavo, instala una herramienta de respaldo o script de su elección, por ejemplo, MySQL Administrator.

Configure su copia de seguridad, por ejemplo, diariamente durante la noche. Los bloqueos están en el esclavo, lo que resulta en un retraso mientras el esclavo se bloquea, pero este retraso se recupera tan pronto como finaliza la copia de seguridad y se abre el bloqueo.

Raffael Meier
fuente