152

我正在尝试将大型数据库中的一小部分记录加载到测试数据库中。

你如何告诉 mysqldump 只给你 800 万条记录中的 n 条记录?

谢谢

4

4 回答 4

234

正如 skaffman 所说,使用 --where选项

mysqldump --opt --where="1 limit 1000000" database

当然,这将为您提供每个表中的前一百万行。

于 2008-09-25T20:39:45.620 回答
62

如果n要从特定表中获取记录,可以执行以下操作:

mysqldump --opt --where="1 limit 1000000" database table > dump.sql

这会将命名表中的第一1000000行转储table到文件dump.sql中。

于 2013-11-07T08:23:20.933 回答
14

由于默认顺序是 ASC,这在这种情况下很少需要,因此您需要有适当的数据库设计才能使 DESC 开箱即用。如果您的所有表都有一个具有相同名称(自然或代理)的主键列,您可以使用以下方法轻松转储 n 个最新记录:

mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql

这是为什么您应该始终命名您的 PK 的id并避免使用复合 PK 的一个完美理由,即使在关联表中也是如此(使用代理键代替)。

于 2017-09-08T09:42:54.147 回答
7

可以给 mysqldump 一个 SQL 查询来执行,它将从中获取转储的数据。然后,您可以在查询中使用“limit X”子句来限制行数。

于 2008-09-25T20:31:06.687 回答