如何为 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 个城市的国家等。
假设有一个制作 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 个城市的国家等。