sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo obtener un volcado correcto usando mysqldump y transacción única cuando se usa DDL al mismo tiempo?

Abra un mysql ventana de comandos y emita este comando:

mysql> FLUSH TABLES WITH READ LOCK;

Esto bloqueará todos tablas en todas bases de datos en esta instancia de MySQL hasta que emita UNLOCK TABLES (o termine la conexión del cliente que contiene estos bloqueos de lectura).

Para confirmar esto, puede abrir otra ventana de comando e intentar hacer un ALTER , DROP , RENAME o TRUNCATE . Estos comandos cuelgan, esperando que se libere el bloqueo de lectura. Presiona Ctrl-C para terminar la espera.

Pero aunque las tablas tienen un bloqueo de lectura, aún puede realizar un mysqldump copia de seguridad.

Las FLUSH TABLES WITH READ LOCK comando puede ser lo mismo que usar --lock-all-tables opción de mysqldump . No está del todo claro, pero este documento parece apoyarlo:

Ambos FLUSH TABLES WITH READ LOCK y --lock-all-tables use la frase "bloqueo de lectura global", por lo que creo que es probable que estos hagan lo mismo. Por lo tanto, debería poder usar esa opción para mysqldump y proteger contra ALTER, DROP, RENAME y TRUNCATE simultáneos.

Re. su comentario:Lo siguiente es de Guilhem Bichot en el registro de errores de MySQL al que se vinculó:

A partir de esto, parece que no puede obtener acceso simultáneo durante una copia de seguridad y bloquear simultáneamente ALTER, DROP, RENAME y TRUNCATE.