【发布时间】:2008-09-25 20:29:30
【问题描述】:
我正在尝试将大型数据库中的一小部分记录样本加载到测试数据库中。
你如何告诉 mysqldump 只给你 800 万条记录中的 n 条记录?
谢谢
【问题讨论】:
标签: mysqldump
我正在尝试将大型数据库中的一小部分记录样本加载到测试数据库中。
你如何告诉 mysqldump 只给你 800 万条记录中的 n 条记录?
谢谢
【问题讨论】:
标签: mysqldump
正如 skaffman 所说,使用 --where 选项:
mysqldump --opt --where="1 limit 1000000" database
当然,这将为您提供每个表中的前一百万行。
【讨论】:
SELECT * from table WHERE 形式的查询中,所以在这种情况下你会得到SELECT * from table WHERE 1 limit 1000000。如果没有 1,您的查询将无效。为 where 子句指定 1(因为 1 始终为真)只会选择所有记录。
mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database 获取 100 万条记录的第二页。确保在第一个页面以外的页面上使用 --no-create-info 标志仅转储数据并保留 create table 内容。
如果您想从特定表中获取 n 记录,您可以执行以下操作:
mysqldump --opt --where="1 limit 1000000" database table > dump.sql
这会将名为table 的表中的第一行1000000 转储到文件dump.sql 中。
【讨论】:
由于默认顺序是 ASC,在这种情况下您很少需要这种顺序,因此您需要有适当的数据库设计才能使 DESC 开箱即用。如果您的所有表都有一个具有相同名称(自然或代理)的主键列,您可以使用以下方法轻松转储 n 条最新记录:
mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql
这是为什么您应该始终命名您的 PK 的 id 并避免复合 PK 的一个完美理由,即使在关联表中也是如此(改用代理键)。
【讨论】:
ORDER BY 1 DESC。
可以给mysqldump 一个SQL 查询来执行,它会从中获取转储的数据。然后,您可以在查询中使用“limit X”子句来限制行数。
【讨论】: