Sua melhor opção é a seguinte
mysqldump --single-transaction --databases db1 db2 > db1_db2.sql
A opção --single-transaction cria um ponto janela no tempo para todos os dados no dump. A única restrição é que você não execute nenhuma DDL
-
ALTER TABLE
-
CREATE TABLE
-
DROP TABLE
-
RENAME TABLE
-
TRUNCATE TABLE
- Por favor, veja meu DBA StackExchange postar
row locking within ACID transaction innodb
para ver toda a declaração que pode prejudicar transações intermitentemente.
Contanto que você não execute nenhum destes durante a duração do mysqldump, o db1 e o db2 serão um instantâneo perfeito a partir do momento em que o mysqldump for iniciado.
Suas tabelas não-InnoDB devem estar bem, desde que você não faça nada para elas: sem DDL, sem INSERTs, sem UPDATEs, sem DELETEs.
ATUALIZAÇÃO 2014-06-26 19:43 EDT
Você perguntou
Are single-transaction and lock-all-tables mutually exclusive? Is one of them implied\default?
Diretamente da documentação do MySQL em - transação única
The --single-transaction option and the --lock-tables option are mutually exclusive because LOCK TABLES causes any pending transactions to be committed implicitly.
Sim, eles são mutuamente exclusivos.
Diretamente da documentação do MySQL em - bloqueio todas as tabelas
Lock all tables across all databases. This is achieved by acquiring a global read lock for the duration of the whole dump. This option automatically turns off --single-transaction and --lock-tables.
Assim, lock-all-tables
desativará --single-transaction
FLUSH TABLES WITH READ LOCK;
e todos os outros mecanismos de travamento pesados (tudo ou nada) não impedirão completamente que o InnoDB faça gravações no espaço de tabela do sistema. escrevi sobre antes no DBA StackExchange .
Aqui está um mapa do InnoDB para você visualizar as outras partes móveis do InnoDB:
Porfavor,leia