¿Las tables InnoDB se bloquearon durante mysqldump cuando se mezclan con MyISAM?

Estoy buscando una solución de copy de security para mis serveres mysql y necesito como less time de inactividad como sea posible. Tengo lo siguiente:

  • Servidores MySQL
  • no se replican
  • cada server representa su propio

Este número puede crecer, por lo que la creación de una réplica maestro / esclavo no será una buena idea.

La forma más fácil de copy de security como veo sería el uso de mysqldump con un software como "automysqlbackup". Mis datos más importantes utilizan InnoDB. Mis tables de InnoDB son bastante pesadas.

La pregunta es: ¿Si hago un mysqldump a todas las bases de datos en el server, bloqueará mis tablas de Innodb?

mysqldumps con InnoDB y MyISAM juntos se tratan como mutuamente excluyentes. He aquí por qué:

Si puede iniciar session en mysql mientras un mysqldump está en progreso, verá algo como esto:

SELECT /* SQL_NO_CACHE */ * FROM tblname 

De forma pnetworkingeterminada, mysqldump hará lo siguiente:

  • Todas las bases de datos se descargan en order alfabético
  • Cada tabla descargada por database se descarga en order alfabético (independientemente del motor de almacenamiento)

Esto debería estar bien para una instancia de MySQL que no tenga otra actividad de database. Las tablas InnoDB y MyISAM no se afectan entre sí.

Usando --single-transaction contra una instancia de MySQL de InnoDB crea un punto de control y descarga todas las tablas del mismo punto en el time. Una vez que se encuentra una tabla MyISAM, todas las apuestas están desactivadas. Podría hacer que todas las tablas de InnoDB después de que el MyISAM se viertan de un punto-en-time diferente.

Para tener un volcado de punto-en-time consistente para una mezcla de InnoDB y MyISAM hay opciones

OPCIÓN 1

Reinicie mysql para que nadie más pueda iniciar session a través de TCP / IP y luego mysqldump

 service mysql restart --skip-networking --skip-grant-tables mysqldump --routines --triggers --all-databases > MySQLData.sql service mysql restart 

OPCION 2

Si todas las tablas de MyISAM son para lectura solamente, sólo mysqldump usando –single-transaction

OPCIÓN # 3

Si se están escribiendo las tablas de MyISAM, –single-transaction no es suficiente

Usted tendrá que hacer lo siguiente:

 mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)" sleep 30 mysqldump --routines --triggers --all-databases > MySQLData.sql 

Inmediatamente después de que se haga el mysqldump, ingrese en mysql y show processlist; . Busque la consulta SELECT SLEEP(86400) , busque ID de process y ejecute KILL <procidnumn>;

mysqldump --single-transaction no bloquea las tablas pero no se garantiza que las tablas MyISAM tengan volcados consistentes con esta opción. Es mejor usar mydumper , mydumper bloquea tablas MyISAM y no bloquea InnoDB para que el volcado sea consistente.

mysqldump bloquea la tabla durante el volcado. Utilice instantáneas LVM o Xtrabackup .