Ejecute MySQLDump sin bloquear tablas

Quiero copiar una base de datos de producción en vivo en mi base de datos de desarrollo local. ¿Hay alguna manera de hacerlo 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 man , si está descargando 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 

Esto es demasiado tarde, pero es bueno para cualquiera que esté buscando el tema. Si no eres innoDB, y no estás preocupado por el locking mientras lo haces, simplemente usa la opción:

 --lock-tables=false 

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 usar el --single-transaction , que le dará una instantánea coherente de la base de datos en el momento en que comienza el volcado.

--skip-add-locks me ayudó

Para volcar tablas grandes, debe combinar la opción –single-transaction con –quick.

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction

Honestamente, configuraría la replicación para esto, como si no bloqueara las tablas, obtendrá datos incoherentes del volcado.

Si el volcado tarda más tiempo, las tablas que ya fueron objeto de dumping pueden haber cambiado junto con alguna tabla que está a punto de ser abandonada.

Entonces, bloquea las tablas o usa la replicación.

Para tablas InnoDB use –single-transaction

“volca el estado consistente de la base de datos en el momento en que se emitió BEGIN sin bloquear ninguna aplicación” MySQL DOCS

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction

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

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

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 .

De acuerdo con la documentación:

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

El tiempo de LOCK TABLES depende del tiempo que el servidor puede copiar los archivos MySQL (no hace un volcado).

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

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

UNLOCK TABLES comandos LOCK TABLE y UNLOCK TABLES .

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