transaction single quick info example drop databases data all mysql database

single - mysqldump--no-data



Ejecutar MySQLDump sin bloquear tablas (13)

Quiero copiar una base de datos de producción en vivo en mi base de datos de desarrollo local. ¿Hay alguna manera de hacer esto sin bloquear la base de datos de producción?

Actualmente estoy usando:

mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1

Pero está bloqueando cada mesa mientras se ejecuta.


¿ --lock-tables=false la --lock-tables=false ?

De acuerdo con la página del manual , si está volcando tablas InnoDB puede usar la opción --single-transaction :

--lock-tables, -l Lock all tables before dumping them. The tables are locked with READ LOCAL to allow concurrent inserts in the case of MyISAM tables. For transactional tables such as InnoDB and BDB, --single-transaction is a much better option, because it does not need to lock the tables at all.

Para innodb DB :

mysqldump --single-transaction=TRUE -u username -p DB


Como ninguno de estos enfoques funcionó para mí, simplemente hice una:

mysqldump [...] | grep -v "LOCK TABLE" | mysql [...]

UNLOCK TABLES comandos LOCK TABLE <x> y UNLOCK TABLES .

Nota: ¡ Esperemos que sus datos no contengan esa cadena!



Esto es casi tan tarde en comparación con el tipo que dijo que llegó tarde como lo fue a la respuesta original, pero en mi caso (MySQL a través de WAMP en Windows 7), tuve que usar:

--skip-lock-tables


Esto es demasiado tarde, pero bueno para cualquiera que esté buscando el tema. Si no está en noDB y no está preocupado por el bloqueo mientras realiza el volcado, simplemente use la opción:

--lock-tables=false


Honestamente, configuraría la replicación para esto, ya que si no bloquea las tablas, obtendrá datos inconsistentes del volcado.

Si el volcado lleva más tiempo, las tablas que ya estaban volcadas podrían haber cambiado junto con alguna tabla que está a punto de ser volcada.

Entonces, o bien bloquear las tablas o usar la replicación.


Hoy, incluso tuve el mismo problema, pero no tuve acceso a la línea de comandos. Así que abrí el archivo sql en el editor de Bloc de notas y lo eliminé debajo de la línea de las tablas

LOCK TABLES `yourtable name` WRITE;

Luego lo importé a mi entorno de desarrollo. Funciona bien. espero que ayude a alguien


La respuesta varía según el motor de almacenamiento que estés usando. El escenario ideal es si estás usando InnoDB. En ese caso, puede utilizar el --single-transaction , que le dará una instantánea coherente de la base de datos en el momento en que comienza el volcado.


Otra respuesta tardía:

Si está intentando hacer una copia en caliente de la base de datos del servidor (en un entorno Linux) y el motor de la base de datos de todas las tablas es MyISAM, debe usar mysqlhotcopy .

Según la documentación:

Utiliza FLUSH TABLES, LOCK TABLES, y cp o scp para hacer una copia de seguridad de la base de datos. Es una forma rápida de realizar una copia de seguridad de la base de datos o tablas individuales, pero solo puede ejecutarse en la misma máquina donde se encuentran los directorios de la base de datos. mysqlhotcopy funciona solo para realizar copias de seguridad de tablas MyISAM y ARCHIVE.

El tiempo de LOCK TABLES depende de la hora en que el servidor pueda copiar los archivos MySQL (no hace un volcado).




--skip-add-locks me ayudó


mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db | mysql -u root --password=xxx -h localhost db