Saya mencoba memuat sampel kecil catatan dari database besar ke database uji.
Bagaimana Anda memberi tahu mysqldump untuk hanya memberi Anda n catatan dari 8 juta?
Terima kasih
Jawaban:
Seperti yang dikatakan skaffman, gunakan opsi --where :
mysqldump --opt --where="1 limit 1000000" database
Tentu saja, itu akan memberi Anda jutaan baris pertama dari setiap tabel.
SELECT * from table WHERE
, jadi dalam hal ini Anda mendapatkan SELECT * from table WHERE 1 limit 1000000
. Tanpa 1, Anda akan mendapatkan kueri yang tidak valid. Menentukan 1 untuk klausa where (karena 1 selalu benar) cukup memilih semua record.
mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database
untuk mendapatkan halaman kedua dari 1 juta rekaman. Pastikan untuk menggunakan tanda --no-create-info di halaman selain yang pertama untuk hanya membuang data dan meninggalkan hal-hal buat tabel .
Jika Anda ingin mendapatkan n
record dari tabel tertentu, Anda dapat melakukan sesuatu seperti ini:
mysqldump --opt --where="1 limit 1000000" database table > dump.sql
Ini akan membuang 1000000
baris pertama dari tabel bernama table
ke dalam file dump.sql
.
Karena urutan defaultnya adalah ASC yang jarang Anda inginkan dalam situasi ini, Anda harus memiliki desain database yang tepat agar DESC dapat digunakan. Jika semua tabel Anda memiliki SATU kolom kunci utama dengan nama yang sama (alami atau pengganti), Anda dapat dengan mudah membuang n catatan terbaru menggunakan:
mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql
Ini adalah alasan yang tepat mengapa Anda harus selalu memberi nama ID PK Anda dan menghindari PK komposit, bahkan dalam tabel asosiasi (gunakan kunci pengganti sebagai gantinya).