我有一个关于备份多个MySQL innodb数据库的问题,这些数据库彼此之间存在交叉数据库关系。值得关注的是数据库备份和恢复期间数据的关系完整性。
这种情况的用例是使用一个“主”数据库来保存顶级数据,例如多个单独域的用户信息,这些数据无法合并到一个数据库中。设置它不是问题,因为MySQL允许与innodb外键交叉数据库关系。
但是,如何在备份期间不中断外键的情况下正确备份主数据库和辅助数据库(假设它们位于同一服务器上)。
我正在寻找一种方法来了解如何在那个瞬间捕获那些数据库中的“快照”,或者如果在备份时间内无法保留关系......
答案 0 :(得分: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时。