从数据库复制一些数据并保持参照完整性

时间:2019-05-29 15:46:24

标签: mysql transactions

要求是从活动数据库(当前为159个表)中提取一些数据到另一个数据库中,以使复制的数据具有完全的参照完整性,而数据处于不断变化的状态(它是实时数据库)。这并不是要转储整个数据库(将近50GB),而只是将我们从整个数据库中识别出的某些行提取到一个单独的数据库中。

我们当前基于初始架构以及随后的DDL迁移和可重复性(视图,存储过程等)创建一个新的数据库,然后 复制适当的行。通常需要10分钟以上,但不到1小时,具体取决于要提取的集合的大小。

有没有办法告诉mysql,我想忽略开始运行提取程序后提交的所有事务,无论是添加新行,删除行还是更新行,但是与数据库的任何其他连接都照常进行,好像我没有提出任何要求。

我不希望发生的事情是我从表1复制数据,到表159时,表1已经更改,表159中的一行引用了表1中的新行。

1 个答案:

答案 0 :(得分:0)

使用mysqldump --single-transaction。这会在开始转储数据之前启动可重复读取的事务,因此在转储数据时发生的任何并发事务都不会影响您的事务转储的数据。


关于您的更新问题:

您可以在事务中进行自己的自定义查询。

在开始运行提取查询之前,以可重复读取模式启动事务。您可以对多个表运行许多查询,并且您提取的所有数据将恰好是启动该事务时当前提交的数据。

您可能想读https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html