Your best option is the following
mysqldump --single-transaction --databases db1 db2 > db1_db2.sql
The option --single-transaction creates a point-in-time window for all the data in the dump. The only restriction is that you do not execute any DDL
As long as you do not execute any of these for the duration of the mysqldump, db1 and db2 will be a perfect snapshot from the moment the mysqldump starts.
Your non-InnoDB tables should be just fine, provided you do nothing to them: no DDL, no INSERTs, no UPDATEs, no DELETEs.
UPDATE 2014-06-26 19:43 EDT
You asked
Are single-transaction and lock-all-tables mutually exclusive? Is one of them implied\default?
Right from the MySQL Documentation on --single-transaction
The --single-transaction option and the --lock-tables option are mutually exclusive because LOCK TABLES causes any pending transactions to be committed implicitly.
Yes, they are mutually exclusive.
Right from the MySQL Documentation on --lock-all-tables
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.
Thus, lock-all-tables
will disable --single-transaction
CAVEAT : Keep in mind that FLUSH TABLES WITH READ LOCK;
and all other heavy-handed (all-or-nothing) locking mechanisms will not completely stop InnoDB from doing writes to the system tablespace. I wrote about before in the DBA StackExchange.
Here is a map of InnoDB for you to visual the other moving parts of InnoDB:
Please read How FLUSH TABLES WITH READ LOCK works with Innodb Tables (MySQL Performance Blog) about other ill effects of locking all tables against InnoDB.
--single-transaction
, or--lock-all-tables
though. I hope you are using innodb if you really care about changes being atomic.