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


8

我对使用MyISAM和InnoDB的MySQL数据库的逻辑备份有疑问。

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

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

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

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

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

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

编辑:

为了澄清起见,可以将问题改写为:

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

Answers:


8

使用mysqldump时,--single-transaction如果所有表均为InnoDB,则只能安全使用,否则备份不一致。

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

注意:如果您确实有混合混合,也许看看xtrabackup。它仅在备份的MyISAM阶段处于锁定状态。


刚要发布此消息,但您击败了我。相关链接:percona.com/doc/percona-xtrabackup/innobackupex/…–
Derek Downey

感谢您确认锁定表可确保两个引擎的备份一致。我目前正在查看适用于MySQL的Zmanda Recovery Manager(我还将看看xtrabackup)。
Dimitre Radoulov 2011年

Zmanda只是所有其他备份方法的GUI管理器-我敢肯定,支持使用xtrabackup。
Morgan Tocker 2011年

@Morgan Tocker,您好,Zmanda还提供了一组脚本(zrm- *),它们实际上执行各种备份类型:逻辑,原始和快照。我们管理的所有数据库都是混合数据库,因此使用单独的产品几乎没有价值-我们无法避免备份期间的锁定。
Dimitre Radoulov 2011年

这个答案说,如果使用mysqldump并指定,--lock-all-tables那么备份将是一致的,对吗?一个人只需要运行一次mysqldump:对InnoDB和MyISAM同时运行是安全的,对吗?
KajMagnus

2

作为您遇到的其他情况,花点时间设置主从服务器设置(可能是从从服务器进行备份)可能会有所帮助。

混合了InnoDB和MyISAM的MySQL数据库将(根据我在每种配置和每种备份工具中所知)始终锁定MyISAM备份阶段的MyISAM表。

为了避免这种锁定,请使用以下设置:

  • 服务器A:mysql主
  • 服务器B:mysql从站(已连接到服务器A)

所有写入和读取都转到服务器A(主服务器)。服务器B(从站)仅用于备份。在从属服务器上,安装您选择的备份工具或脚本,例如MySQL Administrator。

配置您的备份,例如每天晚上配置。锁位于从属服务器上,从而导致从属服务器锁定时出现延迟,但是一旦备份结束并打开了锁,就会滞后于此延迟。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.