MYSQL Dump solo alcune righe


96

Sto provando a fare un dump di mysql di poche righe nel mio database. Posso quindi utilizzare il dump per caricare quelle poche righe in un altro database. Il codice che ho funziona, ma scarica tutto. Come posso fare in modo che mysqldump esegua il dump solo di determinate righe di una tabella?

Ecco il mio codice:


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

Risposte:


142

Correggi la tua --whereopzione. Dovrebbe essere una clausola SQL WHERE valida, come:

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

Hai il nome della colonna fuori dalle virgolette.


1
Grazie ha fatto esattamente quello di cui avevo bisogno. Grazie per l'aiuto!
Shattuck

@AJ, ottime informazioni! Grazie!
Roman Newaza

2
Per la condizione IN , possiamo semplicemente usare --where="id IN(1,2,6,10)". Dove id è la colonna nella tabella. Ref --where
Yogesh

9
Solo una nota per chiunque come me lo usi per inviare un grande datadump a un altro server che si è rotto nel mezzo, se non specifichi --no-create-infoinsieme alla tua clausola where, il nuovo dump ricrea la tabella ed elimina i dati già trasferiti! Potrebbe essere ovvio, ma ora mi ha beccato due volte.
georgiecasey

Nota che il problema non era che il nome della colonna fosse fuori dalle virgolette. Questo è un comando di shell, quindi è necessario scrivere la sintassi della shell per la stringa date_pulled='2011-05-23'. Ciò significa che è necessario citare o eseguire l'escape dei caratteri di virgolette singole, quindi sono inclusi nella stringa anziché essere interpretati come virgolette nella sintassi della shell. L'aggiunta di virgolette doppie intorno all'intera cosa lo fa, ma lo sarebbe --where=date_pulled="'2011-05-23'"(o --where=date_pulled=\'2011-05-23\', o anche --where=date_pulled"'"2011-05-23"'").
Ben

32

Devi citare la clausola "dove".

Provare

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

1
Era esattamente quello di cui avevo bisogno. Un'altra persona ha risposto subito prima di te e io ho scelto la sua risposta, ma ti ho votato positivamente per l'aiuto.
Shattuck

1
C'è un altro modo di usare query come questa: CREATE TABLE new_table AS (SELECT * FROM myResumes WHERE where = date_pulled = '2011-05-23'); Quindi puoi semplicemente esportare questa tabella tramite mysqldump.
Vinayagam

1

Utilizzare questo codice per righe di tabella specifiche, utilizzando la condizione LIKE.

mysqldump -u root -p sel_db_server case_today --where="date_created LIKE '%2018
%'" > few_rows_dump.sql
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.