2008-09-19 24 views
374

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?Ejecutar MySQLDump sin tablas de bloqueo

actualmente estoy usando:

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

pero es cada tabla de bloqueo ya que se ejecuta.

+0

Otra solución tardía: también puede utilizar Percona XtraBackup para volcar su base de datos de producción sin interrupción en lo que respecta al procesamiento de transacciones. Permite hacer una copia de seguridad en caliente, es decir, no afecta las actividades actuales. Vea aquí: https://www.percona.com/software/mysql-database/percona-xtrabackup (no tengo ninguna afiliación de ninguna manera con Percona.) – delx

Respuesta

512

¿Funciona la opción --lock-tables=false?

De acuerdo con la man page, si está volcando las tablas InnoDB se puede utilizar 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. 
+14

para innodb DB mysqldump --single-transaction = TRUE -u username -p DB – AMB

+12

¿Qué sucede si tiene innodb y myisam? – CMCDragonkai

+0

¿Está activado esto por defecto? – CMCDragonkai

8

Honestamente, lo haría la replicación de configuración para esto, ya que si no se bloquea tablas obtendrá inconsistente datos del basurero.

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

Así que o bien bloquea las tablas o usa la replicación.

+0

Esta base de datos completa se lee casi por completo, por lo que no me preocupa que cambie. – Greg

+2

Este comentario es incorrecto. MVCC permite leer el estado consistente sin bloqueos en InnoDB. –

+5

Si no tiene la replicación ya configurada, entonces necesita hacer un volcado para configurarla. El mismo problema existe. –

42

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

268

Esto es demasiado tarde, pero es bueno para cualquiera que esté buscando el tema. Si no está InnoDB, y no se preocupa de bloqueo, mientras que volcar simplemente utilizar la opción:

--lock-tables=false 
+1

Gracias por la respuesta Warren, esto fue muy útil y funcionó a las mil maravillas. – Gavin

+0

ídem. funciona perfectamente. – simplethemes

+7

usando '--lock-table = false --quick' usa los menos recursos del servidor – SyntaxGoonoo

31

--skip-add-locks ayudaron para mí

+1

o también --compare para incluir bloqueos de salto con otras optimizaciones. – ppostma1

+54

Esto elimina las sentencias LOCK TABLES y UNLOCK TABLES del archivo de volcado, no afecta el bloqueo durante la exportación. – dabest1

+6

No, ¡no es lo que estás buscando! Ver el comentario de dabest1. Esto NO hace NADA para evitar que tus tablas se bloqueen mientras haces un mysqldump. Esta NO es una respuesta a la pregunta. – orrd

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

Vota por arriba, esta me funcionó solo agregue los parámetros --skip-opt --single-transaction --max_allowed_packet = 1G –

+0

No recomiendo "--skip-opt" para este propósito. Eso hace mucho más de lo que pedía la pregunta original. Apaga el modo rápido, no incluye el juego de caracteres, etc. etc. – orrd

7

Esto es lo más tarde en comparación con el tipo que dijo que era tarde como estaba a la respuesta original, pero en mi caso (MySQL a través de WAMP en Windows 7), que tuvo que usar:

--skip-lock-tables 
+0

Esto es lo que funcionó para que volcara information_schema sin tener el error "Acceso denegado para el usuario 'debian-sys-maint' @ 'localhost' a la base de datos 'information_schema' cuando se usa LOCK TABLES" –

0

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

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

excluirá ambos LOCK TABLE <x> y UNLOCK TABLES comandos.

Nota: ¡Espero que sus datos no contengan esa cadena en él!

+1

--skip-add-locks durante el volcado lo hace también – codewandler

0

Otra respuesta tardía:

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

disconformidad a la documentación:

Se utiliza tablas de color, LOCK TABLES, y cp o scp para hacer una copia de seguridad de base de datos . Es una manera rápida de realizar una copia de seguridad de la base de datos o tablas simples , pero solo se puede ejecutar en la misma máquina donde se encuentran los directorios de la base de datos . mysqlhotcopy funciona solo para hacer copias de seguridad de las tablas MyISAM y ARCHIVE.

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