使用 MyISAM 和 InnoDB 引擎的数据库的一致逻辑备份

Dim*_*lov 9 mysql innodb myisam mysqldump

我有一个关于同时使用 MyISAM 和 InnoDB 的 MySQL 数据库的逻辑备份的问题。

mysqldump实用程序支持以下两个选项:

  • --single-transaction - 通过在单个事务中转储所有表来创建一致的快照。仅适用于存储在支持多版本的存储引擎中的表(目前只有 InnoDB 支持)[...] 选项自动关闭 --lock-tables。

  • -x, --lock-all-tables - 锁定所有数据库中的所有表。这是通过在整个转储期间获取全局读锁来实现的。自动关闭 --single-transaction 和 --lock-tables 。

    • 对于 InnoDB,我们需要 --single-transaction

    • 对于 MyISAM,我们需要 - 锁定表或锁定所有表(以防我们需要跨数据库一致性)。

那么,混合数据库(同时使用 MyISAM 和 InnoDB 引擎的数据库)应该如何备份?

编辑:

为了澄清,这个问题可以重新表述如下:

lock-[all-]tables 选项是否保证 InnoDB 表的一致备份?

Mor*_*ker 8

使用 mysqldump,您只能--single-transaction在所有表都是 InnoDB 时安全使用,否则您的备份不一致。

如果您需要混合备份,那么您需要备份中的lock-tables所有表(默认),这对所有引擎都是安全的。还值得一提的是,默认选项将确保您的备份是安全的,您无需打开任何特殊标志。

注意:如果您确实有混合组合,请查看 xtrabackup。它只会在备份的 MyISAM 阶段锁定。