如何在mysql中为每个表中的整个数据库sqldump一个数据子集

时间:2016-07-16 03:30:02

标签: mysql database mysqldump

假设有一个作品DB P和一个本地DB L。我想从[{1}}获取一部分数据,并将其恢复为P

我知道可以轻松地L来自sqldump中表格的数据子集。 但是,如果它是一个mysql,比方说有50个表呢?是否可以轻松地DB第一个(例如1000个)记录的所有表格?

作为奖励,假设它是sqldump,是否可以使用连接到大多数其他表的主表,并选择该表的前1000条记录并检索外部数据的子集相应地键入1000条记录?

2 个答案:

答案 0 :(得分:2)

我不认为这是一个简单的方法。对数据进行子集化的唯一方法是使用-w选项,但它会尝试对所有表使用相同的WHERE条件。你可以分两步完成:

mysqldump -w 'id < 1000' dbname mastertable > mastertable.sql
mysqldump -w 'master_id < 1000' dbname child1 child2 child3 ... > children.sql

这假设所有子表都使用相同的外键名称。

您可以将第二个命令简化为:

mysqldump --ignore-table=dbname.mastertable -w 'master_id < 1000' dbname > children.sql

如果数据库中的所有其他表都是子项。

答案 1 :(得分:1)

对于类似的问题,我发现了一个名为Jailer的东西:http://jailer.sourceforge.net/它从您选择的根表开始提取互连数据,而不会破坏外键关系。当然,您可能有多个根表连接所有其他根表,因此请单独选择它们。

就像你只想要一个城市表中的5个城市一样,它检测到国家表连接到城市表并转储这5个城市的国家等。