MYSQL Dump hanya baris tertentu

96

Saya mencoba melakukan dump mysql dari beberapa baris di database saya. Saya kemudian dapat menggunakan dump untuk mengunggah beberapa baris tersebut ke database lain. Kode yang saya miliki berfungsi, tetapi membuang semuanya. Bagaimana cara membuat mysqldump hanya membuang baris tertentu dari tabel?

Ini kode saya:


mysqldump --opt --user=username --password=password lmhprogram myResumes  --where=date_pulled='2011-05-23' > test.sql

Shattuck
sumber

Jawaban:

142

Perbaiki saja --wherepilihan Anda . Ini harus berupa klausa SQL WHERE yang valid, seperti:

--where="date_pulled='2011-05-23'"

Anda memiliki nama kolom di luar tanda kutip.

AJ.
sumber
1
Terima melakukan apa yang saya butuhkan. Terima kasih atas bantuannya!
Shattuck
@AJ, info bagus! Terima kasih!
Roman Newaza
2
Untuk kondisi IN , kita cukup menggunakan --where="id IN(1,2,6,10)". Dimana id adalah kolom pada tabel. Ref --where
Yogesh
9
Hanya sebuah catatan untuk siapa saja seperti saya yang menggunakan ini untuk menyalurkan datadump besar ke server lain yang rusak di tengah, jika Anda tidak menentukan --no-create-infobersama dengan klausa where Anda, dump baru akan membuat ulang tabel dan menghapus data yang sudah ditransfer! Mungkin sudah jelas, tapi sekarang saya tertangkap basah dua kali.
georgiecasey
Perhatikan bahwa masalahnya bukan karena nama kolom berada di luar tanda kutip. Ini adalah perintah shell, jadi Anda perlu menulis sintaks shell untuk string tersebut date_pulled='2011-05-23'. Itu berarti Anda perlu mengutip atau menyela karakter kutip tunggal, sehingga mereka disertakan dalam string daripada diinterpretasikan sebagai tanda kutip dalam sintaks shell. Menambahkan tanda kutip ganda di sekitar semuanya melakukan itu, tetapi begitu juga --where=date_pulled="'2011-05-23'"(atau --where=date_pulled=\'2011-05-23\', atau bahkan --where=date_pulled"'"2011-05-23"'").
Ben
32

Anda perlu mengutip klausa "di mana".

Mencoba

mysqldump --opt --user=username --password=password lmhprogram myResumes  --where="date_pulled='2011-05-23'" > test.sql
Neville Kuyt
sumber
1
Itulah yang saya butuhkan. Orang lain menjawab tepat sebelum Anda dan saya memilih jawabannya, tetapi saya memuji Anda atas bantuannya.
Shattuck
1
Ada cara lain menggunakan query seperti ini: CREATE TABLE new_table AS (SELECT * FROM myResumes WHERE where = date_pulled = '2011-05-23'); Kemudian Anda cukup mengekspor tabel ini melalui mysqldump.
Vinayagam
1

Gunakan kode ini untuk baris tabel tertentu, menggunakan kondisi LIKE.

mysqldump -u root -p sel_db_server case_today --where="date_created LIKE '%2018
%'" > few_rows_dump.sql
Rokonz Zaz
sumber