大規模なデータベースからテストデータベースにレコードの小さなサンプルをロードしようとしています。
Mysqldumpに、800万件のうちn件のレコードのみを提供するように指示するにはどうすればよいですか?
ありがとう
Skaffmanが言うように、-whereオプションを使用します:
mysqldump --opt --where="1 limit 1000000" database
もちろん、すべてのテーブルから最初の100万行が得られます。
特定のテーブルからn
レコードを取得したい場合、次のようなことができます:
mysqldump --opt --where="1 limit 1000000" database table > dump.sql
これにより、最初の1000000
名前がtable
という名前のテーブルからファイルdump.sql
。
mysqldumpには、実行するSQLクエリを与えることができ、そこからダンプのデータを取得します。その後、クエリで「limit X」句を使用して、行数を制限できます。
デフォルトの順序はASCであり、このような状況ではめったに望んでいないので、DESCをそのまま使用するには適切なデータベース設計が必要です。すべてのテーブルに同じ名前(自然またはサロゲート)の1つの主キー列がある場合、次を使用してn個の最新レコードを簡単にダンプできます。
mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql
これは、関連付けテーブルであっても、常にPKにidという名前を付け、複合PKを避ける必要がある理由の完璧な理由です(代わりに代理キーを使用します)。