2012-06-15 84 views
1

我有一个问题涉及多个MySQL innodb数据库的备份,这些数据库彼此具有交叉数据库关系。担心的是在备份和恢复数据库期间数据的关系完整性。mysql - 备份相关的innodb数据库

这种情况下的情况是,一个“主”数据库用于保存顶级数据,例如不能合并到一个数据库中的多个独立域的用户信息。因为MySQL允许与innodb外键交叉数据库关系,所以设置它不是问题。

但是,在备份过程中,如何正确备份主数据库和辅助数据库(假设它们位于同一服务器上)而不破坏外键。

我正在寻找一种方式来一些如何捕捉一个“快照”,在那一瞬间,或者如果这是不可能的备份期间保留关系这些数据库的时间...

回答

1

我希望我正确理解问题。

假设您有两个数据库(db1和db2),其中来自db2中一个或多个表的外键约束引用了db1中的某些内容。

如果您想确保在进行备份时所有内容都是时间点一致的,您可以让mysqldump为您做到。当你运行mysqldump的,你发出--single-transaction选项是这样的:

mysqldump -u... -p... --single-transaction --databases db1 db2 > db1_db2.sql 

创建一个内部的检查点,这样DB1和DB2的引用完整性的条款和点即时即使数据被一致在备份过程中输入db1和db2

在还原mysqldump的过程中,禁用了外键以允许干净,快速的重新加载。您可以信任在还原过程中禁用的外键IF和仅当使用--single-transaction选项创建mysqldump时。

+0

让我只是说谢谢你的优秀回应。我想你完全理解我的问题。 我一直在寻找MySQL企业版以及我发现的以下内容: 使用MySQL企业版进行热备份:http://dev.mysql.com/doc/mysql-enterprise-backup/3.5/en/meb-backup-overview .html 使用MySQL ENterprise的备份命令:http://dev.mysql.com/doc/mysql-enterprise-backup/3.6/en/intro.html –

+0

这些看起来很有趣的选择。使用MySQL企业版的备份命令看起来比用热备份更用户友好。不过,从我对hotbackup了解的情况来看,它的回报就是它的速度。 –

+0

其他人建议在执行转储时使用FLUSH TABLES WITH READ LOCK,但是这似乎对备份点仍然繁忙的长SQL语句有负面影响: 请参阅:http://www.mysqlperformanceblog .com/2012/03/23/how-flush-tables-with-read-lock-works-with-innodb-tables/ –