2011-02-04 11 views
5

Tengo una aplicación java que usa mysql como back-end, todas las noches hacemos una copia de seguridad de mysql usando mysqldump y la aplicación deja de funcionar durante ese período de tiempo (app 20 min).mysql - ¿cómo funciona mysqldump?

Comando utilizado para realizar la copia de seguridad.

$MYSQLDUMP -h $HOST --user=$USER --password=$PASS $database > \ 
$BACKDIR/$SERVER-mysqlbackup-$database-$DATE.sql 
gzip -f -9 $BACKDIR/$SERVER-mysqlbackup-$database-$DATE.sql 

¿Esto es normal o estoy haciendo algo mal que hace que el DB se bloquee durante ese tiempo?

Gracias, K

Respuesta

1

mysqldump tiene que conseguir un bloqueo de lectura en las tablas y mantenerla durante la duración de la copia de seguridad con el fin de asegurar una copia de seguridad coherente. Sin embargo, un bloqueo de lectura puede detener lecturas posteriores, si se produce una escritura en el medio (es decir, read -> write -> read): el primer bloqueo de lectura bloquea el bloqueo de escritura, que bloquea el segundo bloqueo de lectura.

Esto depende en parte de su tipo de tabla. Si está utilizando MyISAM, los bloqueos se aplican a toda la tabla y, por lo tanto, toda la tabla se bloqueará. Creo que los bloqueos en InnoDB funcionan de manera diferente, y que esto no bloqueará toda la tabla.

0

Puede indicar --skip-lock-tables pero esto podría provocar que se modifiquen los datos a medida que realiza la copia de seguridad. Esto podría significar que sus datos son inconsistentes y arrojar todo tipo de errores. Lo mejor es hacer su copia de seguridad en el momento en que menos personas lo usen.

1
If tables are stored in the InnoDB storage engine, mysqldump provides a 
    way of making an online backup of these (see command below). 

    shell> mysqldump --all-databases --single-transaction > all_databases.sql 

Esto puede ayudar ... específicamente la opción single-transaction, y no a las bases de datos --all-uno ... (de la página de manual mysqldump)