如何为 mysql 中的整个数据库从每个 table 中 sqldump 数据子集

how to sqldump a subset of data from each table for an entire database in mysql

假设有一个制作 DB P 和一个本地 DB L。我想要 P 中的数据子集并将它们恢复到 L.

我知道 mysql 中 table 的数据子集很容易 sqldump。 但是,如果它是一个 DB,比如说,有 50 个 table 怎么办?可以轻松地 sqldump 所有 table 的第一个记录,比如 1000 条记录吗?

作为奖励,假设它是 star schema,是否可以使用主要的 table,它连接到大多数其他 table,并且 select table 的前 1000 条记录并相应地检索 1000 条记录的外键数据子集?

我认为没有一种简单的方法可以同时完成所有这些工作。对数据进行子集化的唯一方法是使用 -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

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

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

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