web-dev-qa-db-ja.com

mysqldumpからのレコード数を制限しますか?

大規模なデータベースからテストデータベースにレコードの小さなサンプルをロードしようとしています。

Mysqldumpに、800万件のうちn件のレコードのみを提供するように指示するにはどうすればよいですか?

ありがとう

131
Phil

Skaffmanが言うように、-whereオプションを使用します:

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

もちろん、すべてのテーブルから最初の100万行が得られます。

205
Adam Bellaire

特定のテーブルからnレコードを取得したい場合、次のようなことができます:

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

これにより、最初の1000000名前がtableという名前のテーブルからファイルdump.sql

55

mysqldumpには、実行するSQLクエリを与えることができ、そこからダンプのデータを取得します。その後、クエリで「limit X」句を使用して、行数を制限できます。

8
skaffman

デフォルトの順序はASCであり、このような状況ではめったに望んでいないので、DESCをそのまま使用するには適切なデータベース設計が必要です。すべてのテーブルに同じ名前(自然またはサロゲート)の1つの主キー列がある場合、次を使用してn個の最新レコードを簡単にダンプできます。

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

これは、関連付けテーブルであっても、常にPKにidという名前を付け、複合PKを避ける必要がある理由の完璧な理由です(代わりに代理キーを使用します)。

3